2014-02-03 3 views
-1

Мне бы хотелось, чтобы эта кнопка (при нажатии) нарисовала Овал. Проблема в том, что eclipse говорит что-то о недостающих точках с запятой (в определении прослушивателя действий), и я не понимаю, почему. Каков надлежащий способ передачи методам (bulid in или custom) для прослушивателей действий?Jbutton, который опирается на новый Jpanel

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(); 

    } 
} 
+0

Вы используете IDE как Eclipse? Если это так, IDE должна указать, какая из строк имеет проблемы. – mdewitt

ответ

3

Вы пытаетесь определить метод внутри другого метода. В вашем случае, проблема заключается в строке, содержащей

public void paintComponent(Graphics g) { 
... 

Это не может быть определена внутри другой метод в Java. Там хорошие идеи для живописи в Java в этих официальных ссылках документации и StackOverflow вопросы:

How to make canvas with Swing?

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

2

Если figury класса реализует ActionListener, он должен реализовать общественных недействительным actionPerformed (ActionEvent e) способ.

Также вы пытаетесь объявить метод paintComponent() внутри другого actionPerformed() метод.

Я думаю, что ваш код должен выглядеть следующим образом:

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(); 
    } 
} 
Смежные вопросы