2010-03-19 44 views
8

如果我使用像這樣用MigLayout一個JTextArea:與linewrap使用時MigLayout JTextArea是不縮水=真

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); 
    } 

那麼的JTextArea增長和調整窗口大小時縮小完美。當我將linewrap設置爲true時,當再次使窗口變小時,JTextArea不會縮小。我非常感謝任何幫助。由於

馬塞爾

+0

一個簡單而快速的解決方案,你可以在這裏找到! http://stackoverflow.com/a/7833439/2530822 – TotoliciCristian 2014-05-29 13:28:52

回答

8

這是因爲JTextArea的自動擁有自己的最小寬度設定他們隨時調整。詳情請見MigLayout forum。粗略地總結一下,創建一個包含JTextArea的面板,並讓您進一步控制調整行爲。下面是從上述論壇上的帖子摘錄:

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; 
    } 
} 

然後,無論你將使用JTextArea中,使用含有文本區域面板:

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

非常感謝Kaleb。我也試圖把它放在一個scrollpane中,這也很好。問候Marcel – 2010-05-01 15:57:34

17

我才發現,原來這可以簡單地通過解決轉產

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

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

並且不需要額外的面板。設置一個明確的最小大小是訣竅。

說明:見附註下段上的MiGLayout白皮書填充:

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

+0

+1這似乎也解決了其他頑固組件的問題。在我的情況下,我的鉻瀏覽器框架不會縮小,直到添加最小尺寸。 – 2011-11-30 10:02:26

+0

已證實,這種方法可行,比使用公認的答案更容易使用。你可以指定''wmin 0「'這在我看來是清楚的,是爲了解決一個問題而添加的。爲您的最小修復+1。 – Timmos 2014-04-10 12:32:30

+0

請考慮將此答案標記爲已接受。像這裏的魅力一樣。謝謝。 – FaithReaper 2017-06-23 08:58:33