Java 如何从不同的类定义多个JButton操作

Java 如何从不同的类定义多个JButton操作,java,swing,user-interface,awt,Java,Swing,User Interface,Awt,我正在编写一个程序,在这个程序中,我需要根据单击的按钮为一个单独的类执行不同的操作 public class NewJFrame{ public static JButton b1; public static JButton b2; public static JButton b3; } public class Slot{ int value; JButton button; Slot(int value, JButton button)

我正在编写一个程序,在这个程序中,我需要根据单击的按钮为一个单独的类执行不同的操作

public class NewJFrame{
    public static JButton b1;
    public static JButton b2;
    public static JButton b3;
}

public class Slot{

    int value;
    JButton button;

    Slot(int value, JButton button)
    {
        this.value=value;
        this.button=button;
    }
}

public class Game{
    Slot[] slots=new Slot[3];
    Game(){
        slots[0]=new Slot(1,NewJFrame.b1);
        slots[1]=new Slot(2,NewJFrame.b2);
        slots[2]=new Slot(3,NewJFrame.b3);
    }
    public void actionPerformed(ActionEvent e) {
        for(int i=0;i<3;i++){
            if(e.getSource()==slots[i].button)
                slots[i].button.setText(String.valueOf(value));
        }
    }
}
公共类NewJFrame{
公共静态按钮b1;
公共静态按钮b2;
公共静态按钮b3;
}
公务舱{
int值;
按钮;
插槽(int值,JButton按钮)
{
这个。值=值;
这个按钮=按钮;
}
}
公开课游戏{
插槽[]插槽=新插槽[3];
游戏(){
插槽[0]=新插槽(1,NewJFrame.b1);
插槽[1]=新插槽(2,NewJFrame.b2);
插槽[2]=新插槽(3,NewJFrame.b3);
}
已执行的公共无效操作(操作事件e){
对于(int i=0;i用于封装程序中其他地方使用的功能,例如按钮、菜单和工具栏。下面显示的
BeaconPanel
导出了几个操作,使其易于在控制面板中使用。为了限制实例的扩散,这些操作本身可以是类成员。作为练习,更改
con将
拖动到菜单或将相同的操作添加到菜单

JPanel controls = new JPanel();
controls.add(new JButton(beaconPanel.getFlashAction()));
controls.add(new JButton(beaconPanel.getOnAction()));
controls.add(new JButton(beaconPanel.getOffAction()));


请提出一个更具体的问题。到目前为止,你所做的只是发布一些模糊的、过于宽泛的要求。你的问题越具体,通常答案就越好、越具体。请查看以及各部分,以获取有关如何改进你的问题并增加获得体面帮助的机会的更多信息。取消回复d recs:上面的字段都不应该是静态的,尤其是JButtons。类名应该以大写字母开头,以符合Java命名约定,因为如果你这样做,其他人会更好地理解你的代码和你的问题。谢谢你的重命名,但更重要的更正是改进你的问题,使它更容易理解更容易理解和回答。为了更好地帮助,更快地发布A或。你的“解决”这个问题的方式与你应该做的正好相反。正确的解决办法是不以静态方式访问这些按钮。尽管如此,你仍然没有澄清你的主要问题。也考虑导出一个<代码>列表。
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.Ellipse2D;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.Timer;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

/** @see http://stackoverflow.com/a/37063037/230513 */
public class Beacon {

    private static class BeaconPanel extends JPanel {

        private static final int N = 16;
        private final Ellipse2D.Double ball = new Ellipse2D.Double();
        private final Timer timer;
        private final Color on;
        private final Color off;
        private final AbstractAction flashAction = new AbstractAction("Flash") {
            @Override
            public void actionPerformed(ActionEvent e) {
                timer.restart();
            }
        };
        private final AbstractAction onAction = new AbstractAction("On") {
            @Override
            public void actionPerformed(ActionEvent e) {
                stop(on);
            }
        };
        private final AbstractAction offAction = new AbstractAction("Off") {
            @Override
            public void actionPerformed(ActionEvent e) {
                stop(off);
            }
        };
        private Color currentColor;

        public BeaconPanel(Color on, Color off) {
            this.on = on;
            this.off = off;
            this.currentColor = on;
            timer = new Timer(500, new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    changeColors();
                }
            });
        }

        public void start() {
            timer.start();
        }

        @Override
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            Graphics2D g2 = (Graphics2D) g;
            g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                RenderingHints.VALUE_ANTIALIAS_ON);
            int x = getX() + N;
            int y = getY() + N;
            int w = getWidth() - 2 * N;
            int h = getHeight() - 2 * N;
            ball.setFrame(x, y, w, h);
            g2.setColor(currentColor);
            g2.fill(ball);
            g2.setColor(Color.black);
            g2.draw(ball);
        }

        private void changeColors() {
            currentColor = currentColor == on ? off : on;
            repaint();
        }

        private void stop(Color color) {
            timer.stop();
            currentColor = color;
            repaint();
        }

        public Action getFlashAction() {
            return flashAction;
        }

        public Action getOnAction() {
            return onAction;
        }

        public Action getOffAction() {
            return offAction;
        }

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(N * N, N * N);
        }
    }

    public static void display() {
        JFrame f = new JFrame("Beacon");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        final BeaconPanel beaconPanel = new BeaconPanel(Color.orange, Color.orange.darker());
        f.add(beaconPanel);
        JPanel controls = new JPanel();
        controls.add(new JButton(beaconPanel.getFlashAction()));
        controls.add(new JButton(beaconPanel.getOnAction()));
        controls.add(new JButton(beaconPanel.getOffAction()));
        f.add(controls, BorderLayout.SOUTH);
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
        beaconPanel.start();
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                Beacon.display();
            }
        });
    }
}