= true

2010-03-19 25 views
8

böyle MigLayout ile JTextArea kullanıyorsanız: = true

MigLayout thisLayout = new MigLayout("", "[][grow]", "[]20[]"); 
    this.setLayout(thisLayout); 
    { 
jLabel1 = new JLabel(); 
this.add(jLabel1, "cell 0 0"); 
jLabel1.setText("jLabel1"); 
    } 
    { 
jTextArea1 = new JTextArea(); 
this.add(jTextArea1, "cell 0 1 2 1,growx"); 
jTextArea1.setText("jTextArea1"); 
jTextArea1.setLineWrap(false); 
    } 

sonra JTextArea büyür ve pencere yeniden boyutlandırma mükemmel küçülür. Linewrap'i true olarak ayarladığımda, JTextArea, pencereyi tekrar küçülttüğümde küçülmez. Herhangi bir yardımı çok isterim. Teşekkür

Marcel

+0

Basit ve hızlı çözüm burada bulabilirsiniz! http://stackoverflow.com/a/7833439/2530822 – TotoliciCristian

cevap

8

JTextArea 'ın otomatik olarak minimum genişlik zaman set onlar boyutlandırmak sahip olmasıdır. Detaylar MigLayout forum'da mevcuttur. Kabaca özetlemek gerekirse, JTextArea'u içeren bir panel oluşturun ve yeniden boyutlandırma davranışı üzerinde daha fazla kontrol sahibi olmanızı sağlar. İşte yukarıdaki forumu görevinden bir alıntı:

static class MyPanel extends JPanel implements Scrollable 
{ 
    MyPanel(LayoutManager layout) 
    { 
    super(layout); 
    } 

    public Dimension getPreferredScrollableViewportSize() 
    { 
    return getPreferredSize(); 
    } 

    public int getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction) 
    { 
    return 0; 
    } 

    public boolean getScrollableTracksViewportHeight() 
    { 
    return false; 
    } 

    public boolean getScrollableTracksViewportWidth() 
    { 
    return true; 
    } 

    public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction) 
    { 
    return 0; 
    } 
} 

Sonra JTextArea kullanırsınız yerde, metin alanını içeren panelini kullanın:

MigLayout thisLayout = new MigLayout("", "[][grow]", "[]20[]"); 
this.setLayout(thisLayout); 
{ 
    jLabel1 = new JLabel(); 
    this.add(jLabel1, "cell 0 0"); 
    jLabel1.setText("jLabel1"); 
} 
{ 
    JPanel textAreaPanel = new MyPanel(new MigLayout("wrap", "[grow,fill]", "[]")); 
    jTextArea1 = new JTextArea(); 
    textAreaPanel.add(jTextArea1); 
    this.add(textAreaPanel, "cell 0 1 2 1,grow,wmin 10"); 
    jTextArea1.setText("jTextArea1"); 
    jTextArea1.setLineWrap(false); 
} 
+0

Çok teşekkürler Kaleb. Ayrıca, iyi çalışan bir kaydırma bölmesine koymaya çalıştım. Saygılarımızla Marcel –

17

Sadece bu basit çözülebilir keşfetti

this.add(jTextArea1, "cell 0 1 2 1,growx, wmin 10"); 
hattı

this.add(jTextArea1, "cell 0 1 2 1,growx"); 

değişen

ve ilave panellere gerek yoktur. Açık bir minimum boyut ayarlamak, hile nedir.

Açıklama: MiGLayout whitepaper'da dolgu üzerindeki bölümünün altında nota bakın:

http://www.migcalendar.com/miglayout/whitepaper.html

+0

+1 Diğer inatçı bileşenlerle de problemleri çözüyoruz. Benim durumumda, krom tarayıcım çerçevesi minimum boyut eklenene kadar küçülmez. –

+0

Onaylandı, bu çalışma ve kabul edilen cevaptan çok daha kolay kullanım. Ben "wmin 0" 'ı belirtebilirsiniz; bu da benim düşünceme göre, bir soruna geçici olarak eklendiğini açıkça ortaya koymaktadır. Minimum düzeltmeniz için +1. – Timmos

+0

Lütfen bu cevabı kabul edildi olarak işaretlemeyi düşünün. Burada bir cazibe gibi çalışır. Teşekkürler. – FaithReaper