写了五个java文件,就是想让按钮被按一次,对应的面板发生一次变化,并且指示灯由红色变成绿色。
希望各位友人帮帮忙解决一下。困扰了好几天了。
第一个类:
import java.awt.Color;
import java.awt.GridLayout;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class TestA {
private JLabel label;
private Light light;
private JPanel panel;
private String msg;
public TestA(String msg){
this.msg = msg;
light = new Light();
label = new JLabel(msg);
panel = new JPanel();
panel.setLayout(null);
light.setBounds(0,0,15,20);
panel.add(light);
label.setBounds(20,0,80,20);
panel.add(label);
}
public JPanel getP1(){
return panel;
}
}
第二个:
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JPanel;
public class TestB {
private JButton jbt1;
private JButton jbt2;
private JButton jbt3;
private Light light;
private JPanel jp;
public TestB(){
jbt1 = new JButton("我想日");
jbt2 = new JButton("他想日");
jbt3 = new JButton("你想日");
light = new Light();
jp = new JPanel();
jp.setLayout(new GridLayout(3,1));
jp.add(jbt1);
jp.add(jbt2);
jp.add(jbt3);
jbt1.addActionListener(new mainSun());
jbt2.addActionListener(new mainSun());
jbt3.addActionListener(new mainSun());
}
public JPanel getP2(){
return jp;
}
//按钮监听器
/* 想实现点击第一个按钮,然后那个日本人的面板上设置整型变量自加一次,然后灯变成绿色
* 想实现点击第二个按钮,然后那个美国人的面板上设置整型变量自加一次,然后灯变成绿色
* 想实现点击第三个按钮,然后那个印度人的面板上设置整型变量自加一次,然后灯变成绿色*/
class mainSun implements ActionListener{
int num = 0;
public void actionPerformed(ActionEvent e) {
if(e.getSource() == jbt1){
light.turnOn();//灯的颜色不变 --
}else if(e.getSource() == jbt2){
}else {
}
}
}
}
第三个:
import java.awt.GridLayout;
import javax.swing.BorderFactory;
import javax.swing.JPanel;
import javax.swing.border.BevelBorder;
public class TestC {
private TestA a;
private TestA b;
private TestA c;
private JPanel jpp;
public TestC(){
a = new TestA("日本人");
b = new TestA("美国人");
c = new TestA("印度人");
jpp = new JPanel();
jpp.setLayout(new GridLayout(3,1));
jpp.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
jpp.add(a.getP1());
jpp.add(b.getP1());
jpp.add(c.getP1());
}
public JPanel getJPP(){
return jpp;
}
}
第四个:
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;
public class Light extends JPanel{
private static boolean light ;
public Light(){
light = false;
}
public void turnOn(){
light = true;
}
public void turnOff(){
light = false;
}
public void paintComponent(Graphics g){
super.paintComponent(g);
if(light == true){
g.setColor(Color.GREEN);
}
else{
g.setColor(Color.RED);
}
g.fillOval( 2, 5, 10, 10);
}
}
第五个,测试类:
import java.awt.BorderLayout;
import javax.swing.JFrame;
public class TestMain extends JFrame{
private JFrame frame;
//private TestA a;
private TestB b;
private TestC c;
public TestMain(){
b = new TestB();
c = new TestC();
frame = new JFrame("面板测试");
frame.setLayout(null);
c.getJPP().setBounds(180, 50, 100, 100);
frame.add(c.getJPP());
b.getP2().setBounds(20, 50, 100, 100);
frame.add(b.getP2());
frame.setSize(400,320);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
new TestMain();
}
}