如何在JPanel中绘制一个矩形

时间:2014-02-28 20:48:47

标签: java swing user-interface draw paintcomponent

我试图在JFrame中的JPanel中绘制一个Rectangle。我想使用paintComponents(Graphics g)方法并覆盖它,但由于某种原因,矩形没有像我希望的那样出现在JPanel中。任何帮助,将不胜感激。

public class RectangleFrame extends JFrame implements ActionListener {
    JPanel buttonPanel;
    JButton saveImage;
    JButton clearImage;
    JCheckBox intersections;
    JCheckBox union;
    JPanel drawingArea;



public RectangleFrame()
{
    super();
    setTitle("Rectangles");
    setSize(600,600);
    setResizable(false);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    buttonPanel = new JPanel();
    buttonPanel.setBorder(BorderFactory.createLineBorder(Color.black));
    this.add(buttonPanel, BorderLayout.SOUTH);

    intersections = new JCheckBox("Draw Intersections");
    buttonPanel.add(intersections);

    union = new JCheckBox("Draw Union");
    buttonPanel.add(union);

    saveImage = new JButton("Save Image");
    saveImage.setMargin(new Insets(0,0,0,0));
    buttonPanel.add(saveImage);

    clearImage = new JButton("Clear Image");
    clearImage.setMargin(new Insets(0,0,0,0));
    buttonPanel.add(clearImage);

    drawingArea = new JPanel();
    drawingArea.setBorder(BorderFactory.createLineBorder(Color.blue));
    this.add(drawingArea, BorderLayout.CENTER); 
}
}

      class RectanglePanel extends JPanel
{
public RectanglePanel()
{
    super();
}



@Override
public void paintComponent(Graphics g) 
{
    super.paintComponent(g);

    g.setColor(Color.BLUE);
    g.fillRect(25,25,100,30);       
}


}

这是我在单独的类中的主要方法:

    public class SwingRectangle
{

/**
 * @param args
 */
public static void main(String[] args) 
{
    // TODO Auto-generated method stub
    RectangleFrame frame = new RectangleFrame();
    RectanglePanel panel = new RectanglePanel();
    frame.setVisible(true);

}

}

1 个答案:

答案 0 :(得分:4)

您没有将RectanglePanel添加到您的框架中。

drawingArea = new JPanel();

应该是

drawingArea = new RectanglePanel();

其他要点:

  • 你仍然需要覆盖{@ 1}},而不是{@ 1}},正如@David所建议的那样+1给他
  • paintComponent中创建的面板未使用