我需要在我的讲师的序言下不允许我们在课堂上使用IDE,所以我在写字板中这样做。我想点击raido按钮并更改“红绿灯”颜色。如何使用getSource()与单选按钮进行交互?
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
public class Lab4Frame extends JFrame {
Lab4Frame(){
setTitle("Lab 4 - Application #1");
Lab4Panel p = new Lab4Panel();
Lab4RadioButtonPanel p2 = new Lab4RadioButtonPanel();
setLayout(new GridLayout(2,1));
add(p);
add(p2);
}
public static void main(String[] args){
Lab4Frame frame = new Lab4Frame();
frame.setTitle("Lab4 Application # 1");
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(600, 600);
frame.setVisible(true);
}
}
class Lab4RadioButtonPanel extends JPanel implements MouseListener {
public Lab4RadioButtonPanel() {
this.setLayout(new FlowLayout());
JRadioButton jrbRed = new JRadioButton("Red", true);
JRadioButton jrbYellow = new JRadioButton("Yellow");
JRadioButton jrbGreen = new JRadioButton("Green");
this.setBorder(BorderFactory.createLineBorder(Color.black));
ButtonGroup group = new ButtonGroup();
group.add(jrbRed);
group.add(jrbYellow);
group.add(jrbGreen);
this.add(jrbRed);
this.add(jrbYellow);
this.add(jrbGreen);
jrbRed.setMnemonic('E');
jrbGreen.setMnemonic('G');
jrbYellow.setMnemonic('Y');
}
public void mouseClicked(MouseEvent e)
{
if (e.getSource() == jrbRed){
}
else if (e.getSource() == jrbYellow){
}
else if (e.getSource() == jrbGreen){
}
}
public void mouseExited(MouseEvent e){}
public void mouseReleased(MouseEvent e){}
public void mousePressed(MouseEvent e){}
public void mouseMoved(MouseEvent e){}
public void mouseEntered(MouseEvent e){}
}
class Lab4Panel extends JPanel{
public Lab4Panel(){
}
int height, width;
int radius = 5;
int x = -1;
int y = -1;
protected void paintComponent(Graphics g){
if (x<0 || y<0) {
x = getWidth() / 2 - radius;
y = getHeight() / 2 - radius;
}
super.paintComponent(g);
g.drawRect(x - 10,y - 90, 40, 120);
//g.drawOval(x,y - 80, 4 * radius, 4 * radius);
//g.drawOval(x,y - 40, 4 * radius, 4 * radius);
//g.drawOval(x,y, 4 * radius, 4 * radius);
g.drawRect(x - 5,y - 90, 40, 120);
g.setColor(Color.RED);
g.fillOval(x,y - 80, 4 * radius, 4 * radius);
g.setColor(Color.YELLOW);
g.fillOval(x,y - 40, 4 * radius, 4 * radius);
g.setColor(Color.GREEN);
g.fillOval(x,y, 4 * radius, 4 * radius);
}
}
答案 0 :(得分:3)
不要将鼠标监听器与包含单选按钮的按钮一起使用。请改用动作侦听器。此外,对于任何侦听器,它必须首先添加到组件中。