Masalah textArea GrowByLimit di layerLayout

Saya menyetel textArea setGrowByContent true dan setGrowLimit ke 2, tetapi selalu hanya ada satu baris. Jadi saya memutar kode dan menambah tinggi textArea dua kali jika ukuran textArea lebih besar dari ukuran Tombol. Di bawah ini adalah kode-kodenya. Masalah saya ada di akhir pertanyaan:

      Button homeButtonn = new Button(btnIcon){

      @Override
      protected Dimension calcPreferredSize() {
      System.out.println("Button size: " + super.calcPreferredSize());
      return super.calcPreferredSize(); 
      }

      @Override
      public void setUIID(String id) {
          super.setUIID("homeButtonn"); 
          }
      };

      TextArea buttonTitle = new TextArea(title){

      @Override
           protected Dimension calcPreferredSize() {
           System.out.println("textArea title: " + getText());
           System.out.println("Textarea size: " +super.calcPreferredSize());
           System.out.println("");
           return super.calcPreferredSize(); 
           }
      };
      buttonTitle.setUIID("smallLabel");
      buttonTitle.getAllStyles().setAlignment(Label.LEFT);
      zeroPaddingMargin(buttonTitle);                   

      if (buttonTitle.getPreferredW() -10 > homeButtonn.getPreferredW()) {
         buttonTitle.setPreferredH(buttonTitle.getPreferredH() * 2);
      }
      buttonTitle.setPreferredW(homeButtonn.getPreferredW() - 10);
      buttonTitle.getAllStyles().setMargin(3, 3, 3, 3);
      buttonTitle.setEditable(false);
      buttonTitle.setGrowByContent(true);
      buttonTitle.setGrowLimit(2);
      buttonTitle.setScrollVisible(false);
      gridContainer.add(LayeredLayout.encloseIn(homeButtonn, FlowLayout.encloseRightBottom(buttonTitle)));  

KELUARAN:

Button size: width = 146 height = 140
textArea title: DJ and Sound
Textarea size: width = 194 height = 25

Di sini ukuran textArea lebih besar dari ukuran tombol tetapi jika saya mengatur ukuran textArea dengan ukuran tombol yang tepat, itu akan pas. Jadi bagaimana ukuran textArea bisa lebih besar dari ukuran tombol dan juga semua teks textArea cocok di dalam tombol? Masalah yang saya dapatkan adalah karena ukuran textArea lebih besar dari ukuran tombol, tinggi textArea dikalikan dengan dua kali tingginya tetapi textArea pas dalam satu baris dan menyisakan garis/baris tambahan di bawahnya.

PS lihat tangkapan layarnya. Terima kasih

masukkan deskripsi gambar di sini

tanpa kalkUkuran pilihan atau Ukuran pilihan:

masukkan deskripsi gambar di sini

Jika calcPreferredSize dihilangkan, dibutuhkan seluruh lebar layar meskipun dalam gridlayout dengan 3 kolom

Pembaruan: Kode Terbaru tanpa calcPreferredSize & textArea juga bersarang di dalam wadah

GridLayout gl2 = new GridLayout(counter / 3 + 1, 3);
gl2.setAutoFit(true);
Container gridContainer = new Container(gl2);
gridContainer.setScrollableY(true);
f.addComponent(gridContainer);  

imageUrl = entry.get("img").toString();
title = entry.get("name").toString();
homePlaceholder = homePlaceholder.scaled(screenWidth / 3 - 20, screenWidth / 3 - 26);
encodedHomePlaceholder = EncodedImage.createFromImage(homePlaceholder, true);
Image btnIcon = URLImage.createToStorage(encodedHomePlaceholder, "home_" + title + imageUrl, allUrl.globalHomeImageUrl + imageUrl, URLImage.RESIZE_SCALE_TO_FILL);
homeButton.setIcon(btnIcon);
TextArea buttonTitle = new TextArea(title);
buttonTitle.getAllStyles().setAlignment(Label.LEFT);
buttonTitle.getAllStyles().setMargin(3, 3, 3, 3);
buttonTitle.setEditable(false);
buttonTitle.setGrowByContent(true);
buttonTitle.setGrowLimit(2);
buttonTitle.setScrollVisible(false);
Container btnTitleContainer = new Container();
btnTitleContainer.addComponent(buttonTitle);
gridContainer.add(LayeredLayout.encloseIn(homeButton, FlowLayout.encloseRightBottom(btnTitleContainer)));
f.revalidate();

person beck    schedule 13.03.2016    source sumber
comment
Bagaimana tampilannya tanpa pengaturan ukuran/ukuran kalk yang diinginkan?   -  person Shai Almog    schedule 14.03.2016
comment
saya memperbarui img di atas tanpa ukuran pilihan atau calcPreferred   -  person beck    schedule 14.03.2016


Jawaban (2)


Jangan gunakan calcPreferredSize, setPreferred* atau API sejenisnya saat Anda ingin sesuatu dihitung secara otomatis.

Menurut definisi, Anda menonaktifkan penghitungan otomatis saat Anda menggunakan API ini, itulah sebabnya sebagian besar API tersebut tidak digunakan lagi.

Anda hanya perlu menggunakan logika tata letak.

person Shai Almog    schedule 15.03.2016
comment
jika saya menghapus calcpreferredSize, tombol tersebut mengambil seluruh lebar layar meskipun dalam tata letak grid dengan 3 kolom. lihat tangkapan layar di atas. Tapi jika tidak ada textarea, maka itu berfungsi dengan baik. Saya baru saja memperbarui kode tanpa calcpreferredSize juga - person beck; 16.03.2016
comment
Gunakan konstruktor area judul yang menerima kolom & baris dan secara eksplisit mengatur kolom menjadi sekitar 10. Kemudian aktifkan setText. Konstruktor yang hanya menerima String secara implisit menyetel kolom ke lebar String. - person Shai Almog; 17.03.2016
comment
ini tidak berhasil juga. Mungkin ada beberapa masalah atau bug dalam tata letak berlapis dengan textarea atau saya melakukan kesalahan dalam kode saya, saya tidak tahu entah bagaimana saya tidak bisa memperbaikinya dalam tata letak lapisan. jadi saya mencoba hal lain dan berhasil tetapi saya punya beberapa pertanyaan sederhana di sana juga. Lihat jawaban saya. Terima kasih - person beck; 23.03.2016

Apa pun yang saya lakukan untuk memperbaikinya di tata letak lapisan dan area teks, itu tidak berhasil jadi saya mencoba hal lain dan berhasil. Saya mengatur gambar bg wadah dengan tata letak batas & menjaga area teks di selatan tata letak batas.

homePlaceholder = homePlaceholder.scaled(screenWidth / 3, screenWidth / 3);
encodedHomePlaceholder = EncodedImage.createFromImage(homePlaceholder, true);
Image btnIcon = URLImage.createToStorage(encodedHomePlaceholder, "home_" + title + imageUrl, allUrl.globalHomeImageUrl + imageUrl, URLImage.RESIZE_SCALE_TO_FILL);

Container innerContainer = new Container(new BorderLayout());
innerContainer.getAllStyles().setBgImage(btnIcon);
innerContainer.getAllStyles().setBackgroundType(Style.BACKGROUND_IMAGE_SCALED);
gridContainer.add(innerContainer);

TextArea buttonTitle = new TextArea(properCase(title));
buttonTitle.setUIID("smallLabel");
zeroPaddingMargin(buttonTitle);
innerContainer.add(BorderLayout.SOUTH,buttonTitle);

buttonTitle.setEditable(false);
buttonTitle.setGrowByContent(true);
buttonTitle.setGrowLimit(2);
buttonTitle.setScrollVisible(false);

gridContainer.revalidate();
person beck    schedule 23.03.2016
comment
Saya punya pertanyaan di sini @shai... saya menskalakan lebar dan tinggi placeholder untuk urLIimage dengan sempurna, tetapi di gridlayout, tinggi gambar bg lebih besar dari lebarnya, bagaimana saya bisa mendapatkan persegi sempurna di gridlayout. Saya juga memeriksa pembuat gui dan hasilnya sama. - person beck; 23.03.2016