Jbutton利用了一个新的Jpanel

时间:2014-02-03 20:44:02

标签: java swing jbutton paintcomponent

我想要这个按钮(点击)画一个椭圆形。问题是eclipse说了一些关于缺少分号的东西(在动作监听器定义中)并且我不明白为什么。什么是将方法(bulid in或custom)传递给动作侦听器的正确方法?

public class figury implements ActionListener {

    public figury() {

        frame();
    }

    public void frame() {

        JFrame f = new JFrame();
        f.setVisible(true);
        f.setSize(480, 480);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel p = new JPanel();
        JButton kolo = new JButton("Rysuj kolo");


        JButton kolo = new JButton("Rysuj kwadrat");
        kwadrat.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                public void paintComponent(Graphics g){
                    g.fillOval(50,50,100,100);
                    g.setColor(Color.RED);
                }
            }
        });

        p.add(kolo);
        f.add(p);
    }

    public static void main(String[] args) {

        new figury();

    }
}

2 个答案:

答案 0 :(得分:3)

您正尝试在其中的另一个方法中定义方法。在您的情况下,问题出在包含

的行中
public void paintComponent(Graphics g) {
...

这不能在java中的另一个方法中定义。在这些官方文档链接和stackoverflow问题中,有很好的java绘画想法:

How to make canvas with Swing?

http://www.oracle.com/technetwork/java/painting-140037.html

答案 1 :(得分:2)

如果 figury 类实现 ActionListener ,则应实现 public void actionPerformed(ActionEvent e) 方法。

此外,您正尝试在另一个 actionPerformed()方法中声明方法 paintComponent()

我认为你的代码应该是这样的:

public class figury implements ActionListener {

     public figury() {

         frame();
     }

     public void frame() {

         JFrame f = new JFrame();
         f.setVisible(true);
         f.setSize(480, 480);
         f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

         JPanel p = new JPanel();
         JButton kolo = new JButton("Rysuj kolo");


         JButton kwadrat = new JButton("Rysuj kwadrat");
         kwadrat.addActionListener(this);

         p.add(kolo);
         p.add(kwadrat);
         f.add(p);
     }

     @Override
     public void actionPerformed(ActionEvent e) {
         paintComponent(/*pass here a Graphics object*/);
     }

     public void paintComponent(Graphics g) {
         g.fillOval(50,50,100,100);
         g.setColor(Color.RED);
     }

     public static void main(String[] args) {
         new figury();
     }
}