0

可能重复:
ActionListener (Java) 的问题

我正在尝试在 JFrame 中的两个按钮上实现动作侦听器,但问题是两个按钮之一正在执行这两个功能;但我还没有配置它这样做。

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class MyChangingCirlce implements ActionListener {
    JButton colorButton, labelButton;
    JLabel myLabel;
    MyDrawPanel mdp;
    JFrame frame;

    public static void main(String[] args) {
        MyChangingCirlce mcc = new MyChangingCirlce();
        mcc.createFrame();
    } // end of main

    public void createFrame() {
        frame = new JFrame();
         colorButton = new JButton("Changing Colors");
         labelButton = new JButton("Change Label");
        myLabel = new JLabel("I'm a label");
        mdp = new MyDrawPanel();

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.getContentPane().add(BorderLayout.CENTER, mdp);
        frame.getContentPane().add(BorderLayout.SOUTH, colorButton);
        frame.getContentPane().add(BorderLayout.EAST, labelButton);
        frame.getContentPane().add(BorderLayout.WEST, myLabel);
        colorButton.addActionListener(this);
        labelButton.addActionListener(this);
        frame.setSize(300, 300);
        frame.setVisible(true);

    }

    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == colorButton) {
            frame.repaint();
        } else {
            myLabel.setText("That's it");
        }

    }

}

我的 labelButton 只执行了 1 次操作;即它会随着标签文本改变圆圈的颜色。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class MyDrawPanel extends JPanel{

    public void paintComponent(Graphics g)
    {
        int red = (int) (Math.random() * 255);
        int green = (int) (Math.random() * 255);
        int blue= (int) (Math.random() * 255);
        Color randomColor = new Color(red,green,blue);
        g.setColor(randomColor);
        g.fillOval(20,70,100,100);
    }
}
4

1 回答 1

4

您覆盖 colorButton 和 labelButton。所以'else'总是在起作用。更改标签将导致重绘。

改变

    JButton colorButton = new JButton("Changing Colors");
    JButton labelButton = new JButton("Change Label");

    colorButton = new JButton("Changing Colors");
    labelButton = new JButton("Change Label");

在给自己写了一个类来测试它之后,我想到了这个:

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.util.Date;

public class Foo implements ActionListener {

    JButton colorButton, labelButton;
    JLabel myLabel;
    JFrame frame;
    MyDrawPanel mdp;

    public static void main(String[] args) {
        Foo mcc = new Foo();
        mcc.createFrame();
    } //end of main

    public void createFrame() {
        frame = new JFrame();
        colorButton = new JButton("Changing Colors");
        labelButton = new JButton("Change Label");
        myLabel = new JLabel("I'm a label");
        mdp = new MyDrawPanel();

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JSplitPane jsp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
        mdp.setPreferredSize(new Dimension(150, 150));
        jsp.setLeftComponent(mdp);
        frame.setBounds(10, 10, 600, 600);
        JPanel right = new JPanel();
        right.add(BorderLayout.SOUTH, colorButton);
        right.add(BorderLayout.EAST, labelButton);
        right.add(BorderLayout.WEST, myLabel);
        jsp.setRightComponent(right);
        frame.getContentPane().add(jsp);
        colorButton.addActionListener(this);
        labelButton.addActionListener(this);
        frame.setVisible(true);

    }

    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == colorButton) {
            myLabel.setText("Color button's it");
            frame.repaint();
        } else {
            myLabel.setText("That's it" + new Date().toString());
        }

    }

    public class MyDrawPanel extends JPanel {

        @Override
        public void paintComponent(Graphics g) {
            int red = (int) (Math.random() * 255);
            int green = (int) (Math.random() * 255);
            int blue = (int) (Math.random() * 255);
            Color randomColor = new Color(red, green, blue);
            g.setColor(randomColor);
            g.fillOval(20, 70, 100, 100);
        }
    }
}
于 2012-07-25T19:20:34.087 回答