绘制图形对象



我想在JFrame中绘制一些东西,所以我决定使用以下代码,但是虽然它确实有效,但我不想有任何ActionListener。

public class Draw
{
    public static void main(String[] args)
    {
        final JPanel jPanel = new JPanel();
        JFrame jFrame = new JFrame("Drawing Window");
        JButton jButton = new JButton("draw");
        jPanel.add(jButton);
        jFrame.add(jPanel);
        jFrame.setBounds(0, 0, 500, 500);
        // first place
        jFrame.setVisible(true);
        jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // second place
        jButton.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                Graphics graphics = jPanel.getGraphics();
                graphics.drawLine(0,0,100,100);
                graphics.drawOval(0,0,100,100);
            }
        });
    }
}

如您所见,我在ActionPerfomed方法中添加了以下代码:

Graphics graphics = jPanel.getGraphics();
graphics.drawLine(0,0,100,100);
graphics.drawOval(0,0,100,100);

现在我想把它放在第一位(代码中的注释位置),但我会收到一个错误,如果我把它放在第二位,我不会得到任何错误,但它不会绘制任何内容。

似乎有必要将绘图方法放在动作中执行,我的问题是为什么? 还有其他方法吗?

            graphics.drawLine(0,0,100,100);
            graphics.drawOval(0,0,100,100);

这些语句需要移动到jPanel的重写paintComponent(Graphics)方法。


还应重写面板的getPreferredSize()方法以返回 500x500 的尺寸,而不是:

jFrame.setBounds(0, 0, 500, 500); 

只需致电:

jFrame.pack(); 

另一个选择是制作方法(paintComponentpaint):

public void paintComponent(Graphics graphics){
        graphics.drawLine(0,0,100,100);
        graphics.drawOval(0,0,100,100);

}

并从 actionListener 调用重绘,如图所示。

public void actionPerformed(ActionEvent action){

   repaint();
 }

如果它对您有用,您可以根据需要对其进行转换......

相关内容

  • 没有找到相关文章

最新更新