在Java Swing中使用多个ActionListener

时间:2011-06-16 18:24:42

标签: java swing actionlistener

我的问题是,目前我正在为游戏制作GUI,这个GUI有很多按钮。我之前在我的代码中遇到了一个问题,我使用的actionListener是快速连续地在两个按钮中查找事件,没有足够的时间让第二个按钮执行和操作并使其无用。我认为通过在内部类中使第二个按钮成为不同的actionListener来克服这个问题

button5.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {

现在我正在尝试为第三个按钮做同样的事情(最后是第四个和第五个按钮

P1Roll.addActionListener(new ActionListener(){
    public void ActionPerformed(ActionEvent e){

但它给我带来了各种各样的错误。由于我不熟悉,我不确定如何继续。任何关于此的提示或我的代码中的任何内容都将非常感激。 :)

import java.awt.Font;
import java.awt.event.*;
import java.util.Random;

import javax.swing.*;
import javax.swing.border.Border;

public class GUI_Windows extends JFrame implements ActionListener {

    public static void main(String[] args) {

        new GUI_Windows();

        Random rand1, rand2, rand3, rand4;
        int dice1, dice2, dice3, dice4;
        int numTurns = Turns.getValue();

        rand1 = new Random();
        rand2 = new Random();
        rand3 = new Random();
        rand4 = new Random();

        dice1 = rand1.nextInt(6 - 1 + 1) + 1;
        dice2 = rand2.nextInt(6 - 1 + 1) + 1;
        dice3 = rand3.nextInt(6 - 1 + 1) + 1;
        dice4 = rand4.nextInt(6 - 1 + 1) + 1;

    }

    Box MegaBox, box1, box2, box3, box4, box5, box6, box7, box8, box9, box10,
            box11;

    Box Minibox1, Minibox2, Minibox3, Minibox4, Minibox5, MiniMegaBox;

    Box MegaBox2, box12, box13, box14, box15, box16, box17, box18, box19,
            box20, box21, box22, box23;

    JLabel TitleLabel, InstructionLabel, Instructions, SelectMode, LoG;

    Border spacer1 = BorderFactory.createEmptyBorder(5, 5, 50, 5);
    Border spacer2 = BorderFactory.createEmptyBorder(5, 60, 5, 0);
    Border spacer3 = BorderFactory.createEmptyBorder(5, 0, 5, 60);
    Border spacer4 = BorderFactory.createEmptyBorder(0, 0, 5, 45);
    Border spacer5 = BorderFactory.createEmptyBorder(0, 0, 6, 0);
    Border spacer6 = BorderFactory.createEmptyBorder(5, 10, 0, 70);
    Border spacer7 = BorderFactory.createEmptyBorder(0, 0, 0, 35);

    JRadioButton button1, button2;

    JButton button3, button4;

    JButton button5, button6;

    static JSlider Turns;

    public GUI_Windows() {

        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                button3.doClick();
            }
        });

        this.setTitle("Bottom Out!");
        this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
        this.setResizable(false);
        this.setLocation(500, 125);
        this.setSize(350, 421);

        MegaBox = Box.createVerticalBox();

        box1 = Box.createVerticalBox();
        box1.setBorder(spacer1);
        box2 = Box.createVerticalBox();
        box2.setBorder(spacer2);

        box3 = Box.createHorizontalBox();
        box4 = Box.createHorizontalBox();
        box4.setBorder(spacer3);

        box5 = Box.createVerticalBox();
        box5.setBorder(spacer5);

        box6 = Box.createHorizontalBox();
        box7 = Box.createHorizontalBox();
        box8 = Box.createHorizontalBox();

        box9 = Box.createHorizontalBox();

        box10 = Box.createHorizontalBox();
        box10.setBorder(spacer7);

        box11 = Box.createHorizontalBox();
        box11.setBorder(spacer6);

        button1 = new JRadioButton();
        button1.addActionListener(this);
        button2 = new JRadioButton();
        button2.addActionListener(this);

        TitleLabel = new JLabel("BOTTOM OUT");
        TitleLabel.setFont(new Font("Times New Roman", Font.BOLD, 20));
        TitleLabel.setAlignmentY(1);

        InstructionLabel = new JLabel("Instructions:");
        InstructionLabel.setAlignmentY(0);
        InstructionLabel.setFont(new Font("Arial", Font.BOLD, 15));

        Instructions = new JLabel();
        Instructions.setAlignmentY(0);
        Instructions
                .setText("<HTML>Each game will be 3 - 20 turns, with either One Player versus the Computer, or Two Players "
                        + "versus each other. Each turn, you will roll two die, and then the two die are totaled up, and "
                        + "multiplied by the number of the roll it is for that turn. If this total is equal to, or higher than the "
                        + "total of your last scores in that turn, than you add those points to your score for that turn. Then you "
                        + "may choose to roll again, or end your turn to lock in your points for that turn.</HTML>");

        SelectMode = new JLabel("Select Mode:");
        SelectMode.setFont(new Font("Arial", Font.BOLD, 15));

        LoG = new JLabel("Select number of Turns:");

        Turns = new JSlider(2, 20, 2);
        Turns.setMajorTickSpacing(2);
        Turns.setMinorTickSpacing(1);
        Turns.setPaintTicks(true);
        Turns.setPaintLabels(true);
        Turns.setSnapToTicks(true);

        button3 = new JButton("Quit");
        button3.setVisible(true);
        button3.addActionListener(this);

        button4 = new JButton("Next");
        button4.setVisible(true);
        button4.addActionListener(this);

        button5 = new JButton("Done");
        button5.setVisible(true);
        // button5.addActionListener(this);

        button6 = new JButton("Done");
        button6.setVisible(true);
        button6.addActionListener(this);

        ButtonGroup group1 = new ButtonGroup();
        group1.add(button1);
        group1.add(button2);

        ButtonGroup group2 = new ButtonGroup();
        group2.add(button3);
        group2.add(button4);

        box6.add(TitleLabel);
        box7.add(InstructionLabel);
        box7.add(Box.createHorizontalGlue());
        box7.add(new JLabel(" "));
        box8.add(Instructions);

        box3.add(SelectMode);
        box3.add(Box.createHorizontalGlue());
        box3.add(new JLabel(" "));

        box4.add(button1);
        box4.add(new JLabel(" One Player"));
        box4.add(Box.createHorizontalGlue());
        box4.add(button2);
        box4.add(new JLabel(" Two Players"));

        box9.add(LoG);
        box9.setBorder(spacer4);

        box10.add(Turns);
        box10.add(Box.createHorizontalGlue());
        box10.add(new JLabel(" "));

        box11.add(button3);
        box11.add(Box.createHorizontalGlue());
        box11.add(button4);

        box1.add(box6);
        box1.add(box7);
        box1.add(box8);

        box5.add(box3);
        box5.add(box4);

        box2.add(box5);
        box2.add(box9);
        box2.add(box10);
        box2.add(box11);

        MegaBox.add(box1);
        MegaBox.add(box2);

        this.add(MegaBox);
        this.setVisible(true);

    }

    int onePlayer = 0;
    int isDone = 0;

    public void actionPerformed(ActionEvent e) {

        if (e.getSource() == button3) {
            System.exit(0);
        }
        if (button1.isSelected()) {
            onePlayer = 1;
        } else if (button2.isSelected()) {
            onePlayer = 2;
        }
        if (e.getSource() == button4 && onePlayer == 0) {
            JOptionPane.showMessageDialog(button1,
                    "You must select the number of players!", "Try again!",
                    JOptionPane.WARNING_MESSAGE);
        } else if (e.getSource() == button4 && onePlayer != 0) {

            final JFrame pFrame = new JFrame();

            pFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            pFrame.setTitle("Bottom Out!");
            pFrame.setResizable(false);
            pFrame.setLocation(500, 125);
            pFrame.setSize(250, 200);

            JLabel EnterName1, EnterName2;

            final JTextField NameBox1;
            final JTextField NameBox2;

            Border border1 = BorderFactory.createEmptyBorder(5, 25, 15, 25);
            Border border2 = BorderFactory.createEmptyBorder(15, 25, 5, 25);
            Border border3 = BorderFactory.createEmptyBorder(5, 0, 5, 0);

            EnterName1 = new JLabel("Player 1, please enter your name:");
            EnterName2 = new JLabel("Player 2, please enter your name:");

            NameBox1 = new JTextField("Miller");
            NameBox2 = new JTextField("Julian");

            if (onePlayer == 1) {
                NameBox2.setEditable(false);
                NameBox2.setText("Watson");
            }

            Minibox1 = Box.createVerticalBox();
            Minibox2 = Box.createVerticalBox();
            Minibox3 = Box.createVerticalBox();
            Minibox4 = Box.createHorizontalBox();
            MiniMegaBox = Box.createVerticalBox();

            Minibox1.add(EnterName1);
            Minibox1.add(NameBox1);
            Minibox1.setBorder(border1);

            Minibox2.add(EnterName2);
            Minibox2.add(NameBox2);
            Minibox2.setBorder(border2);

            Minibox3.add(Minibox1);
            Minibox3.add(Minibox2);

            Minibox4.add(new JLabel(" "));
            Minibox4.add(Box.createHorizontalGlue());
            Minibox4.add(button5);
            Minibox4.add(Box.createHorizontalGlue());
            Minibox4.add(new JLabel(" "));
            Minibox4.setBorder(border3);

            MiniMegaBox.add(Minibox3);
            MiniMegaBox.add(Minibox4);

            pFrame.add(MiniMegaBox);

            pFrame.setVisible(true);
            this.setVisible(false);

            button5.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {

                    if (e.getSource() == button5) {

                        Border spaceBorder1 = BorderFactory.createEmptyBorder(
                                45, 45, 15, 45);
                        Border spaceBorder2 = BorderFactory.createEmptyBorder(
                                15, 45, 30, 45);
                        Border spaceBorder3 = BorderFactory.createEmptyBorder(
                                5, 15, 5, 0);
                        Border spaceBorder4 = BorderFactory.createEmptyBorder(
                                5, 0, 10, 10);
                        Border spaceborder5 = BorderFactory.createEmptyBorder(
                                0, 0, 15, 0);
                        Border spaceborder6 = BorderFactory.createEmptyBorder(
                                15, 0, 0, 0);

                        JFrame gFrame = new JFrame();
                        gFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                        gFrame.setTitle("Bottom Out!");
                        gFrame.setResizable(false);
                        gFrame.setLocation(500, 125);
                        gFrame.setSize(350, 421);

                        TitleLabel = new JLabel("BOTTOM OUT");
                        TitleLabel.setFont(new Font("Times New Roman",
                                Font.BOLD, 20));
                        TitleLabel.setAlignmentY(1);
                        box23 = Box.createHorizontalBox();
                        box23.add(TitleLabel);
                        box23.setBorder(spaceborder6);

                        box12 = Box.createHorizontalBox();
                        box12.setBorder(spaceBorder1);
                        box13 = Box.createHorizontalBox();
                        box13.setBorder(spaceBorder2);
                        box14 = Box.createHorizontalBox();
                        box14.setBorder(spaceborder5);

                        box15 = Box.createVerticalBox();

                        box16 = Box.createHorizontalBox();
                        box16.setBorder(spaceBorder3);
                        box17 = Box.createHorizontalBox();
                        box17.setBorder(spaceBorder3);
                        box18 = Box.createHorizontalBox();
                        box18.setBorder(spaceBorder3);
                        box19 = Box.createHorizontalBox();
                        box19.setBorder(spaceBorder3);
                        box20 = Box.createHorizontalBox();
                        box20.setBorder(spaceBorder3);
                        box21 = Box.createHorizontalBox();
                        box21.setBorder(spaceBorder4);

                        box22 = Box.createVerticalBox();

                        MegaBox2 = Box.createVerticalBox();

                        JLabel Player1, Player2, P1Score, P2Score;

                        JButton P1Roll, P2Roll, EndTurn;

                        JLabel TurnNum, TurnMax, TurnsRem, P1TScore, P2TScore, Winner;

                        Player1 = new JLabel(NameBox1.getText() + ":");
                        P1Score = new JLabel("Score");
                        P1Roll = new JButton("Roll!");

                        Player2 = new JLabel(NameBox2.getText() + ":");
                        P2Score = new JLabel("Score");
                        P2Roll = new JButton("Roll!");

                        EndTurn = new JButton("End Turn");

                        TurnNum = new JLabel("Turn Number: ");
                        TurnMax = new JLabel("Turn max: ");
                        TurnsRem = new JLabel("Turns left: ");
                        P1TScore = new JLabel("Player 1 Score: ");
                        P2TScore = new JLabel("Player 2 Score: ");
                        Winner = new JLabel("Player is Winning");

                        box12.add(Player1);
                        box12.add(Box.createHorizontalGlue());
                        box12.add(P1Score);
                        box12.add(Box.createHorizontalGlue());
                        box12.add(P1Roll);

                        box13.add(Player2);
                        box13.add(Box.createHorizontalGlue());
                        box13.add(P2Score);
                        box13.add(Box.createHorizontalGlue());
                        box13.add(P2Roll);

                        box14.add(new JLabel(" "));
                        box14.add(Box.createHorizontalGlue());
                        box14.add(EndTurn);
                        box14.add(Box.createHorizontalGlue());
                        box14.add(new JLabel(" "));

                        box15.add(box23);
                        box15.add(box12);
                        box15.add(box13);
                        box15.add(box14);

                        box16.add(TurnNum);
                        box16.add(Box.createHorizontalGlue());
                        box16.add(new JLabel(" "));
                        box17.add(TurnMax);
                        box17.add(Box.createHorizontalGlue());
                        box17.add(new JLabel(" "));
                        box18.add(TurnsRem);
                        box18.add(Box.createHorizontalGlue());
                        box18.add(new JLabel(" "));
                        box19.add(P1TScore);
                        box19.add(Box.createHorizontalGlue());
                        box19.add(new JLabel(" "));
                        box20.add(P2TScore);
                        box20.add(Box.createHorizontalGlue());
                        box20.add(new JLabel(" "));
                        box21.add(new JLabel(" "));
                        box21.add(Box.createHorizontalGlue());
                        box21.add(Winner);

                        box22.add(box16);
                        box22.add(box17);
                        box22.add(box18);
                        box22.add(box19);
                        box22.add(box20);
                        box22.add(box21);

                        MegaBox2.add(box15);
                        MegaBox2.add(box22);

                        gFrame.add(MegaBox2);

                        gFrame.setVisible(true);
                        pFrame.setVisible(false);

P1Roll.addActionListener(new ActionListener(){ public void ActionPerformed(ActionEvent e){

}

@Override
public void actionPerformed(ActionEvent e) {

    int turnNum;

    for(turnNum; numTurns > 0 ; numTurns -- ){

    }




}});

                    }
                }
            });
        }


}}

1 个答案:

答案 0 :(得分:0)

从最初阅读代码开始,您似乎正在使用不正确的语法创建匿名ActionListener。

P1Roll.addActionListener(new ActionListener(){ public void ActionPerformed(ActionEvent e){

}

@Override
public void actionPerformed(ActionEvent e) {

    int turnNum;

    for(turnNum; numTurns > 0 ; numTurns -- ){

    }




}});

应该是

P1Roll.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e)
{
    int turnNum;
    for(turnNum; numTurns > 0 ; numTurns -- )
    {

    }
});