2011-05-13 64 views
0

美好的一天。Java。用按钮单击绘制形状的问题

我开发的程序在用户点击按钮时必须显示几个形状。至少它没有显示它。哪里不对? 代码是:

public class ShowFrame extends JFrame 
{ 
    public ShowFrame() 
    { 
     this.setTitle("Show data");            //Title 
     this.setSize(DEF_WIDTH, DEF_HEIGHT);         //Size of frame 
     this.setResizable(false); 

    //...          

    JButton testButton = new JButton("Test"); 
    buttonPanel.add(testButton); 
    this.add(buttonPanel, BorderLayout.SOUTH); 


    testButton.addActionListener(new ActionListener() {     //Add listener 
     public void actionPerformed(ActionEvent e) {    
      DrawStuff stuff = new DrawStuff();        //Create class which draws shapes 
      add(stuff, BorderLayout.CENTER); 
      System.out.println("Test Button"); 
     } 
    }); 
    } 

public static final int DEF_WIDTH = 600;         
public static final int DEF_HEIGHT = 400;         

private JPanel buttonPanel = new JPanel(); 
} 

类绘制形状:

public class DrawStuff extends JComponent 
{ 
    public void paintComponent(Graphics g) 
    { 
     Graphics2D g2 = (Graphics2D) g; 
     //... 
     Rectangle2D rect = new Rectangle2D.Double(leftX, topY, width, height); 
     Line2D line  = new Line2D.Double(leftX, topY, 0, 0); 
     //... 
     g2.draw(rect); 
     g2.draw(line); 
     //... 
    } 

} 

回答

1

当您添加/上可见GUI删除组件的代码应该是:

panel.add(...); 
panel.revalidate(); 
panel.repaint(); 

你添加的设计每次点击一个按钮时新面板都不是一个很好的面板。

相反,您应该创建一个自定义绘画面板并覆盖paintComponent()方法。然后当你点击一个按钮时,你可以在自定义组件中调用一个方法来设置你想绘制的形状。 paintComponent()方法应该足够聪明以绘制形状。然后在面板上调用repaint()。

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