我在JPanel中放了几个JTextField
我希望实现这样一个功能。就是JPanel中的JTextField获得焦点后,JPanel变色。
有没有不把代码写在JTextField的获得失去焦点的事件中?可不可以直接在JPanel判断?谢谢。
我希望实现这样一个功能。就是JPanel中的JTextField获得焦点后,JPanel变色。
有没有不把代码写在JTextField的获得失去焦点的事件中?可不可以直接在JPanel判断?谢谢。
把这个类添加的JTextField的监听中
public class MyPanel implements FocusListener{public void focusGained(FocusEvent e) {
}
public void focusLost(FocusEvent e) {
}
}JTextField.addFocusListener(new MyPanel());
public class MyPanel extends JPanel implements FocusListener
import java.awt.Container;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;public class TestFocus extends JFrame {
/**
*
*/
private static final long serialVersionUID = 1L;
private JPanel panel = new JPanel();
private JTextField f1 = new JTextField("文本框1");
private JTextField f2 = new JTextField("文本框2");
private JLabel label = new JLabel("风向标");
private Color c = null; //初始时JPanel的背景色 private boolean state = false; //文本框2的焦点状态,初始为false,表示没有获得焦点
public TestFocus() {
super("Demo");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setBounds(200, 200, 400, 400);
Container pane = this.getContentPane();
pane.add(panel);
c = panel.getBackground();
panel.add(f1);
panel.add(f2);
panel.add(label);
f2.addFocusListener(new FocusAdapter(){
@Override
public void focusGained(FocusEvent e) {
System.out.println("按钮2获得焦点");
state = true;
} @Override
public void focusLost(FocusEvent e) {
System.out.println("按钮2失去焦点");
state = false;
}
});
Thread t = new Thread(new MyThread());
t.start();
}
//用于监测文本框2焦点状态变化的线程
class MyThread implements Runnable { @Override
public void run() {
while(true) {
try {
Thread.sleep(100);
}
catch(InterruptedException ie) {
//
}
//如果2当前没有获得焦点,则设置JPanel背景色为初始的背景色
if(!state) {
if(c!=null) {
panel.setBackground(c);
// label.setForeground(c);
panel.validate();
panel.repaint();
}
}
else { //获得焦点,设置背景色为红色
panel.setBackground(Color.red);
// label.setForeground(Color.red);
panel.validate();
panel.repaint();
}
}
}
}
public static void main(String[]args) {
new TestFocus().setVisible(true);
}
}