2017-11-25 150 views
0

一个快速而简单的问题我似乎无法找到答案。 是否可以绘制一个形状(矩形,椭圆形等)并添加到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中?谢谢。

+0

您忘记了默认情况下JFrame的contentPane使用BorderLayout,并且您需要阅读Swing布局管理器,因为这是解决您的问题的关键。现在如果你想在另一个JPanel之上显示一个JPanel,那么这是一个不同的问题,并且需要一个不同的解决方案,包括只使用一个JPanel来绘图,并且保存子组件而不是两个JPanel。 –

+0

这是原始封闭的副本:https://stackoverflow.com/questions/13057836/using-two-jpanels-in-one-jframe。但是,这不是添加多个面板的问题。我相信这是一个绘画问题,所以我重新提出了这个问题。 – camickr

回答

0

我在网上找到的图形绘制示例直接将形状添加到JFrame中。

当将面板添加到该帧直接内容窗格的默认布局是BorderLayout的,所以组件被调整到帧的大小。

是否可以绘制一个形状(矩形,椭圆形等)并添加到JPanel中,然后将此JPanel添加到JFrame中?

JFrame frame = new JFrame(); 
    DShape shape = new DShape(); 
    JPanel panel = new JPanel(); 
    panel.add(shape); 
    frame.add(panel); 

的默认布局管理的JPanelFlowLayout。 A FlowLayout尊重添加到它的组件的首选大小。您的组件没有首选大小,因此大小为(0,0),因此没有任何可绘制的内容。

您需要覆盖DShape面板的getPreferredSize()方法以返回适当的大小。

阅读有关Custom Painting的Swing教程的部分以获取更多信息和工作示例。

+0

这解决了它。谢谢! –