我试图让我的应用程序看起来像这样:
但是当我试图做到这一点时我得到这样的东西:
这是我用来创建我的两个JPanels的代码,以及我如何添加按钮和soo ..
//This is the panel that shows the image
appletRunningPanel = new ImagePanel();
appletRunningPanel.setSize(600, 300);
appletRunningPanel.validate();
//This is the panels that shows the 3 buttons
appletRunningPanel2 = new Panel(new GridLayout(1, 3));
appletRunningPanel2.setSize(600, 300);
appletRunningPanel2.add(test1);
appletRunningPanel2.add(test2);
appletRunningPanel2.add(test3);
appletRunningPanel2.validate();
//Then i add them to the applet with this:
add(appletRunningPanel);
add(appletRunningPanel2);
以下是ImagePanel的代码
public class ImagePanel extends JPanel{
private BufferedImage image;
public ImagePanel() {
setSize(600, 300);
try {
image = ImageIO.read(getClass().getResourceAsStream("/res/TCHLogo.png"));
} catch (IOException ex) {
// handle exception...
System.out.println(ex);
}
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image, 0, 0, null);
}
}
答案 0 :(得分:2)
GridLayout将拉伸每个单元格中的组件以适合单元格的大小,如果要避免此拉伸,则将按钮添加到另一个面板并将该面板添加到GridLayout
。
根据我的经验,用Java构建用户界面就是混合和匹配布局管理器以实现您的总体目标。那里有一些简化的经理,如Mig Layout
对于你的例子,我会做这样的事情:
+----------------------------------------+
| panel1 |
|+--------------------------------------+|
|| panel2 ||
|+--------------------------------------+|
+----------------------------------------+
+----------------------------------------+
| panel3 |
|+-----------++-----------++------------+|
|| panel4 || panel5 || panel6 ||
|+-----------++-----------++------------+|
+----------------------------------------+
panel1
有BorderLayout
panel2
是您的ImagePanel
,并通过panel1
panel1.add(panel2, BorderLayout.CENTER);
panel3
是您的GridLayout
。panel4
,panel5
和panel6
都是默认值(FlowLayout
),这些JPanel
中的每一个都将包含您的三个按钮之一。< / LI>
然后,您可以将其布局设置为BorderLayout
并通过panel1
和getContentPane().add(panel1, BorderLayout.NORTH);
通过panel3
它并不完美,但它会让你看起来更干净。您可以添加更多内容以使事物看起来更漂亮。我最喜欢的布局管理员之一是BoxLayout
。
答案 1 :(得分:1)
您需要更好地了解布局管理器。浏览this handy guide并选择适合您需要的布局管理器。
在底部面板上,GridLayout不考虑组件的首选大小(JButtons),它使用网格部分中的所有可用空间。
您可能需要为每个面板使用不同的布局管理器,并为您的applet框架再使用另一个布局管理器。
答案 2 :(得分:0)
尝试添加中间JPanel 即
JPanel appletRunningPanel2Wrapper = new JPanel();
appletRunningPanel2Wrapper.add(appletRunningPanel2);
add(appletRunningPanel2Wrapper);