如何在java中为按钮添加动作

时间:2014-09-24 06:22:29

标签: java swing applet

我一直在使用java按钮,我创建了一个按钮,但是当我单击按钮时,我希望对象的形状发生变化。这是我用过的代码

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class shapes {
public static void main(String[] a) {
    JFrame f = new JFrame("Change shapes");
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JButton b = new JButton("Shapes Change");
    f.getContentPane().add(b);
    f.pack();      
    f.setVisible(true);




}

Public void paint (Graphics g)
{
   //no clue what to do here

}
private static abstract class MyButton extends JButton implements ActionListener {
MyButton()
{
    addActionListener(this);
}

  public void actionPerformed(ActionEvent e) {
  if (e.getSource() == b)
         {

                //no clue what to do here

            }
}
}
}

首先,创建了一个形状,单击按钮后我想将其更改为其他形状。

3 个答案:

答案 0 :(得分:3)

确实应该需要子类JButton。如果您想自定义按钮,可以使用Action API,请参阅How to Use Actions

要执行自定义绘制,您应该扩展一个Swing组件,例如JComponentJPanel并覆盖paintComponent方法......

有关详细信息,请参阅Performing Custom Painting

然后,您需要提供一些方法,您可以调用它来告诉组件形状应该更改为应该如何更改形状。

然后,您将为按钮ActionListener提供一种方法来引用绘图面板的实例并调用这些方法......

答案 1 :(得分:0)

您只需在按钮上添加ActionListener

b.addActionListener(new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent e) {
        // do some action
    }
});

还有其他注意事项:

  1. 您不应在Event Dispatch Thread (EDT)之外运行Swing方法,否则可能会遇到不可预测的错误。
  2. Java naming conventions指定类名称应大写。在您的代码中,您将类命名为#34; shapes"但更恰当的名称是" Shapes"。

答案 2 :(得分:0)

首先声明并定义绘制对象的方法。例如drawSquare(),drawCircle(),它绘制所需的形状。定义单选按钮或类似的东西以获得用户选择(以了解必须绘制哪个对象)。在actionPerformed()中检查选择了哪个radiobutton并调用适当的绘制对象的方法并调用repaint()以在用户界面中进行更新