【发布时间】:2016-09-09 08:06:20
【问题描述】:
我正在尝试使用 JPanel 的 paintComponent() 方法绘制两个定义大小的正方形,一个相邻的相邻。 这是我到目前为止所尝试的:
1.边框布局
我尝试在单独的 JPanel 子类中绘制每个正方形,然后将这些 JPanel 添加到 JFrame。
结果:正方形被挤压到 JPanel 的相对两侧:高度符合预期,但宽度最小。
JFrame frame = new JFrame();
GreenPanel greenPanel = new GreenPanel();
frame.getContentPane().add(BorderLayout.WEST, greenPanel);
BluePanel bluePanel = new BluePanel();
frame.getContentPane().add(BorderLayout.EAST, bluePanel);
frame.setSize(500, 350);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
class GreenPanel extends JPanel {
public void paintComponent(Graphics g) {
g.setColor(Color.GREEN);
g.fillRect(0, 0, 100, 100);
}
}
class BluePanel extends JPanel {
public void paintComponent(Graphics g) {
g.setColor(Color.BLUE);
g.fillRect(0, 0, 100, 100);
}
}
2。流式布局
我尝试将我的“子”JPanels 与绘制的正方形添加到“父”JPane,然后调用 JFrame.setContentPane(JPanel)。
结果:正方形在顶部中心区域被绘制为小正方形。
JFrame frame = new JFrame();
JPanel outerPanel = new JPanel();
frame.setContentPane(outerPanel);
GreenPanel greenPanel = new GreenPanel();
outerPanel.add(greenPanel);
BluePanel bluePanel = new BluePanel();
outerPanel.add(bluePanel);
frame.setSize(500, 350);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
class GreenPanel extends JPanel {
public void paintComponent(Graphics g) {
g.setColor(Color.GREEN);
g.fillRect(0, 0, 100, 100);
}
}
class BluePanel extends JPanel {
public void paintComponent(Graphics g) {
g.setColor(Color.BLUE);
g.fillRect(0, 0, 100, 100);
}
}
我做错了什么?有什么办法可以强制布局管理器尊重用 paintComponent() 绘制的正方形的大小?
【问题讨论】:
-
您使用的是布局吗?如果你不知道这个尝试 frame.setLayout(null)。
-
我看不到您在哪里设置了布局管理器。您需要显式设置布局管理器,除非您使用默认设置。
-
@Alejandro Cortes 我不会这样做
frame.setLayout(null)。它需要为每个组件设置边界。这就是布局管理器的用途。