【发布时间】:2018-02-16 20:17:16
【问题描述】:
我正在尝试为 Java 程序创建一个特定的 UI,但我在选择合适的布局管理器时遇到了麻烦。我希望我的程序有一个包含三个元素(两个 JTextField 和一个 JButton)的顶部面板和一个内部有另一个 JPanel 的下部 JPanel。内面板应始终为正方形,根据其容器居中并适应其容器的最大高度或宽度。我曾尝试使用 ComponentAdapter 来实现始终保持正方形的效果,但程序似乎并没有按照我想要的方式运行,顶部 Panel 似乎也被挤到了顶部
JPanel maincontainer = new JPanel();
maincontainer.setLayout(new BoxLayout(maincontainer, BoxLayout.PAGE_AXIS));
JPanel jpanel2 = new JPanel();
jpanel2.setLayout(new GridLayout(0, 3));
JTextField txt = new JTextField();
txt.setFocusable(false);
JButton btn = new JButton();
btn.setFocusable(false);
JTextField txt2 = new JTextField();
txt2.setFocusable(false);
jpanel2.add(txt);
jpanel2.add(btn);
jpanel2.add(txt2);
maincontainer.add(jpanel2);
JPanel masterPane = new JPanel(new GridBagLayout());
JPanel centerPane = new JPanel();
masterPane.add(centerPane);
masterPane.addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
if(masterPane.getHeight()<masterPane.getWidth())
centerPane.setSize(masterPane.getHeight(), masterPane.getHeight());
else
centerPane.setSize(masterPane.getWidth(), masterPane.getWidth());
}
});
centerPane.setBackground(Color.blue);
masterPane.add(centerPane);
maincontainer.add(masterPane);
JFrame frame = new JFrame("");
frame.getContentPane().add(maincontainer);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(true);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
frame.setMinimumSize(new Dimension(300,300));
frame.setSize(500, 500);
【问题讨论】:
标签: java swing jpanel layout-manager