我创建了一个简单的程序,其中有1个JLabel,上面写着“您想继续吗?”和2个JButton,一个写着是,另一个写着否。
我使用GridBagLayout来组织JPanel / JFrame。我的程序编译和运行都很好,但是GridBagLayout将所有组件都居中放置在JFrame的中心。由于我对swing不熟悉,可以有人向我展示如何将所有组件对齐到JFrame的左上角吗?
我创建了一个简单的程序,其中有1个JLabel,上面写着“您想继续吗?”和2个JButton,一个写着是,另一个写着否。
我使用GridBagLayout来组织JPanel / JFrame。我的程序编译和运行都很好,但是GridBagLayout将所有组件都居中放置在JFrame的中心。由于我对swing不熟悉,可以有人向我展示如何将所有组件对齐到JFrame的左上角吗?
可能不是一个真正的答案,但是:停止使用GridBagLayout。它有太多陷阱,使用起来非常脆弱,所以请不要使用它。
使用更好的替代方案,如MigLayout,并学习它。除非你确实需要,否则不要费心学习Java的默认布局管理器。
以下是使用MigLayout的示例:
JPanel panel = new JPanel(new MigLayout("","",""));
panel.add(myJButton1, "wrap");
panel.add(myJButton2, "wrap");
panel.add(myJButton3, "wrap");
panel.add(myJButton4, "wrap");
panel.add(myJButton5, "wrap");
panel.add(myJButton6, "wrap");
有几种方法可以实现,您可以先将所有组件添加到另一个容器中,然后在您的容器中布局该容器,但基本原则仍然保持不变...
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class Test {
public static void main(String[] args) {
new Test();
}
public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
public TestPane() {
setLayout(new GridBagLayout());
GridBagConstraints gbc= new GridBagConstraints();
gbc.weightx = 1;
gbc.anchor = GridBagConstraints.WEST;
gbc.gridwidth = GridBagConstraints.REMAINDER;
for (int index = 0; index < 10; index++) {
add(new JButton("Test"), gbc);
}
gbc.weighty = 1;
add(new JLabel(), gbc);
}
}
}