【问题标题】:How to draw a rectangle within a JPanel如何在 JPanel 中绘制矩形
【发布时间】:2014-03-05 00:31:14
【问题描述】:

我试图在 JFrame 内的 JPanel 内绘制一个矩形。我想使用 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);

}

}

【问题讨论】:

  • 你在哪里将RectanglePanel 添加到框架中?
  • 我相信您要覆盖的方法是paintComponent(Graphics g)(没有's')。确保随后调用 super.paintComponent(g)。 paintComponent(g) 是 JComponent 上的一个方法。 paintComponents(g) 是 Container 上的一个方法。
  • 在给出答案后删除问题的新趋势是怎么回事?我最近在 SO 上看过好几次了。

标签: java swing user-interface draw paintcomponent


【解决方案1】:

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

drawingArea = new JPanel();

应该是

drawingArea = new RectanglePanel();

其他要点:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-05
    • 1970-01-01
    • 1970-01-01
    • 2021-05-21
    • 1970-01-01
    • 2016-02-15
    相关资源
    最近更新 更多