我想要这个按钮(点击)画一个椭圆形。问题是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();
}
}
答案 0 :(得分:3)
您正尝试在其中的另一个方法中定义方法。在您的情况下,问题出在包含
的行中public void paintComponent(Graphics g) {
...
这不能在java中的另一个方法中定义。在这些官方文档链接和stackoverflow问题中,有很好的java绘画想法:
答案 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();
}
}