Possible Duplicate:
Issues with 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仅执行两次动作;即它会更改圆圈的颜色以及标签文本。
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);
}
}
最佳答案
您覆盖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);
}
}
}