将图形添加到JPanel
问题描述:
一个快速而简单的问题我似乎无法找到答案。 是否可以绘制一个形状(矩形,椭圆形等)并添加到JPanel中,然后将此JPanel添加到JFrame中?我在网上找到的图形绘制示例直接将形状添加到JFrame中。例如:将图形添加到JPanel
public class DShape extends JPanel
{
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.setColor(Color.GREEN);
g.drawRect(10,10,100,30);
}
public class Test {
public static void main(String[] args)
{
JFrame frame = new JFrame();
DShape shape = new DShape();
JPanel panel = new JPanel();
panel.add(shape);
frame.add(panel);
frame.setSize(200,200);
frame.setVisible(true);
}
}
此代码将只显示一个空白的JFrame。如果将DShape类对象直接添加到JFrame,则会显示绿色的矩形。是否可以首先将形状添加到JPanel,然后将JPanel添加到JFrame中?谢谢。
答
我在网上找到的图形绘制示例直接将形状添加到JFrame中。
当将面板添加到该帧直接内容窗格的默认布局是BorderLayout的,所以组件被调整到帧的大小。
是否可以绘制一个形状(矩形,椭圆形等)并添加到JPanel中,然后将此JPanel添加到JFrame中?
JFrame frame = new JFrame();
DShape shape = new DShape();
JPanel panel = new JPanel();
panel.add(shape);
frame.add(panel);
的默认布局管理的JPanel
是FlowLayout
。 A FlowLayout
尊重添加到它的组件的首选大小。您的组件没有首选大小,因此大小为(0,0),因此没有任何可绘制的内容。
您需要覆盖DShape
面板的getPreferredSize()
方法以返回适当的大小。
阅读有关Custom Painting的Swing教程的部分以获取更多信息和工作示例。
+0
这解决了它。谢谢! –
您忘记了默认情况下JFrame的contentPane使用BorderLayout,并且您需要阅读Swing布局管理器,因为这是解决您的问题的关键。现在如果你想在另一个JPanel之上显示一个JPanel,那么这是一个不同的问题,并且需要一个不同的解决方案,包括只使用一个JPanel来绘图,并且保存子组件而不是两个JPanel。 –
这是原始封闭的副本:https://stackoverflow.com/questions/13057836/using-two-jpanels-in-one-jframe。但是,这不是添加多个面板的问题。我相信这是一个绘画问题,所以我重新提出了这个问题。 – camickr