【问题标题】:How to add actions to a button in java如何在java中为按钮添加动作
【发布时间】:2014-09-24 06:22:29
【问题描述】:

我一直在使用 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

            }
}
}
}

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

【问题讨论】:

  • 没有人知道你的规格,所以你应该告诉我们你想要什么不要我们告诉你

标签: java swing applet


【解决方案1】:

确实应该对JButton 进行子类化。如果你想自定义按钮,你可以使用Action API,见How to Use Actions

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

更多详情请见Performing Custom Painting

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

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

【讨论】:

    【解决方案2】:

    您只需在按钮上添加一个ActionListener

    b.addActionListener(new ActionListener() {
    
        @Override
        public void actionPerformed(ActionEvent e) {
            // do some action
        }
    });
    

    还有几点需要注意:

    1. 您不应在Event Dispatch Thread (EDT) 之外运行 Swing 方法,否则您可能会遇到不可预知的错误。
    2. Java naming conventions 指定类名应大写。在您的代码中,您将类命名为“shapes”,但将其命名为“Shapes”更合适。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2016-04-10
        • 1970-01-01
        • 2019-03-25
        • 1970-01-01
        • 2022-11-01
        • 1970-01-01
        • 2016-04-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多