我想在面板中佈局4個組件A,B,C,D,如下圖所示。 我可以用什麼佈局或方法來做到這一點?Java Swing佈局這些組件
P.S.如果將A和D並行放置更容易,則可以接受。我只想讓D最右邊,有點向北,但A,B,C垂直居中。
A B C應該對齊。我對我的糟糕繪畫感到抱歉。
我想在面板中佈局4個組件A,B,C,D,如下圖所示。 我可以用什麼佈局或方法來做到這一點?Java Swing佈局這些組件
P.S.如果將A和D並行放置更容易,則可以接受。我只想讓D最右邊,有點向北,但A,B,C垂直居中。
A B C應該對齊。我對我的糟糕繪畫感到抱歉。
有多種選擇。像其他人提到的一樣,GridBagLayout
是本地Java中最受歡迎和最強大的佈局管理器之一。你也可以使用GroupLayout
,我更喜歡它,但是有些人更難纏繞它們......但如果你不反對添加第三方庫,那麼我現在使用MigLayout來處理大多數事情。佈局約束是字符串,一切都相對簡單。
下面是一個簡單的例子。這將確保D組件始終位於右上角,並且A,B,C組件始終處於中心位置。運行它並拖動框架。你會看到D組件總是在面板的右上角。
import java.awt.*;
import javax.swing.*;
public class Test {
public Test() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new MyPanel());
frame.pack();
frame.setMinimumSize(frame.getPreferredSize());
frame.setVisible(true);
}
class MyPanel extends JPanel {
public MyPanel() {
JTextField labelA = new JTextField("Your A component");
JTextField labelB = new JTextField("Your B component");
JTextField labelC = new JTextField("Your C component");
JTextField labelD = new JTextField("Top Right D");
JPanel north = new JPanel(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.anchor = GridBagConstraints.FIRST_LINE_END;
gbc.weightx = 1;
gbc.insets = new Insets(10, 10, 10, 10);
north.add(labelD, gbc);
JPanel south = new JPanel(new GridBagLayout());
gbc.anchor = GridBagConstraints.CENTER;
gbc.gridy = 0;
south.add(labelA, gbc);
gbc.gridy = 1;
south.add(labelB, gbc);
gbc.gridy = 2;
south.add(labelC, gbc);
setLayout(new BorderLayout());
add(north, BorderLayout.NORTH);
add(south, BorderLayout.CENTER);
}
}
public static void main(String[] args) {
new Test();
}
}
A,B和C的左右邊緣是不是故意對齊? – jla
嘗試'GridBagLayout'。 –
對於'GridBagLayout',將約束'錨'設置爲'FIRST_LINE_END',並填充到'HORIZONTAL'以獲得您想要的D。 (如果需要,我可以發佈示例。) – Smitty