列的你不能這樣做嚴重的佈局枝條GridLayout
或BoxLayout
數量。忘記 關於他們。
第一個問題是:你確定你不想讓JTextArea
和JTextField
增長? UI中的一個標準是這些組件正在增長和縮小;第一個在兩個方向,第二個在水平方向。
無論如何,我發佈解決方案GroupLayout
和MigLayout
,這是我強烈建議的經理 。
一個)解與GroupLayout
每個組件有三種尺寸:最小,優選的,並且最大。這些 設置爲每個組件的一些合理的默認設置。這就是爲什麼趨向於水平增長的原因;其最大值被設置爲一個非常大的數字 。
package com.zetcode;
import java.awt.Container;
import java.awt.EventQueue;
import javax.swing.BorderFactory;
import javax.swing.GroupLayout;
import javax.swing.JComponent;
import javax.swing.JFrame;
import static javax.swing.JFrame.EXIT_ON_CLOSE;
import javax.swing.JLabel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class GroupLayoutStretchingEx extends JFrame {
public GroupLayoutStretchingEx() {
initUI();
}
private void initUI() {
JTextArea area = new JTextArea(12, 20);
area.setBorder(BorderFactory.createEtchedBorder());
JLabel input = new JLabel("Input");
JTextField textField = new JTextField(15);
createLayout(area, input, textField);
setTitle("Stretching");
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
private void createLayout(JComponent... arg) {
Container pane = getContentPane();
GroupLayout gl = new GroupLayout(pane);
pane.setLayout(gl);
gl.setAutoCreateContainerGaps(true);
gl.setAutoCreateGaps(true);
gl.setHorizontalGroup(gl.createParallelGroup(GroupLayout.Alignment.TRAILING)
.addComponent(arg[0], GroupLayout.DEFAULT_SIZE,
GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addGroup(gl.createSequentialGroup()
.addComponent(arg[1])
.addComponent(arg[2], GroupLayout.DEFAULT_SIZE,
GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
);
gl.setVerticalGroup(gl.createSequentialGroup()
.addComponent(arg[0], GroupLayout.DEFAULT_SIZE,
GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addGroup(gl.createParallelGroup()
.addComponent(arg[1])
.addComponent(arg[2], GroupLayout.DEFAULT_SIZE,
GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
);
pack();
}
public static void main(String[] args) {
EventQueue.invokeLater(() -> {
GroupLayoutStretchingEx ex = new GroupLayoutStretchingEx();
ex.setVisible(true);
});
}
}
在GroupLayout
,你需要在addComponent()
方法的最大 元件尺寸設定正確的值。
JTextArea area = new JTextArea(12, 20);
通過設置行數和列數爲JTextArea
,我們 設置此組件的大小參訪。佈局管理器在其計算中稍後使用該值 。
b)中解與MigLayout
在MigLayout
,我們控制與各種 約束部件的resizement,如fill
,grow
,或push
。通過不使用它們, 組件不會增長。
package com.zetcode;
import javax.swing.BorderFactory;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import net.miginfocom.swing.MigLayout;
public class MigLayoutStretchingEx extends JFrame {
public MigLayoutStretchingEx() {
initUI();
}
private void initUI() {
JTextArea area = new JTextArea(12, 20);
area.setBorder(BorderFactory.createEtchedBorder());
JLabel input = new JLabel("Input");
JTextField textField = new JTextField(15);
createLayout(area, input, textField);
setTitle("MigLayout example");
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private void createLayout(JComponent... arg) {
setLayout(new MigLayout());
add(arg[0], "wrap");
add(arg[1], "split 2");
add(arg[2], "growx");
pack();
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
MigLayoutStretchingEx ex = new MigLayoutStretchingEx();
ex.setVisible(true);
});
}
}
這裏是截圖:

請張貼一些代碼片段,以調查該問題。 – Braj
首先查看[放置容器中的組件](http://docs.oracle.com/javase/tutorial/uiswing/layout/index.html),以獲取關於不同佈局管理器的更多詳細信息,類似於'FlowLayout'和'GridBagLayout'可以完成這項工作 – MadProgrammer
以最小尺寸提供ASCII圖形或簡單的*圖形*佈局圖,如果可調整大小,寬度和高度更大。 –