关于JPanel的一个问题

约翰羊 2011-03-15 10:04:04
我在JPanel中放了几个JTextField
我希望实现这样一个功能。就是JPanel中的JTextField获得焦点后,JPanel变色。
有没有不把代码写在JTextField的获得失去焦点的事件中?

可不可以直接在JPanel判断?

谢谢。
...全文
94 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
bule951 2011-03-16
  • 打赏
  • 举报
回复
正好在用swing 不过没遇过这种需求。
ai59445088 2011-03-15
  • 打赏
  • 举报
回复
为了可用分
feichexia 2011-03-15
  • 打赏
  • 举报
回复
label标签可以忽略注释掉,只是我开始用来测试的。
feichexia 2011-03-15
  • 打赏
  • 举报
回复
答案在上面,花了20来分钟写完的,实现了你的要求。
feichexia 2011-03-15
  • 打赏
  • 举报
回复
import java.awt.Color;
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);
}

}
hardsonxu 2011-03-15
  • 打赏
  • 举报
回复
上面写漏了一点,应该是
public class MyPanel extends JPanel implements FocusListener
hardsonxu 2011-03-15
  • 打赏
  • 举报
回复
你可以自定义一个面板类继承JPanel并实现FocusListener
把这个类添加的JTextField的监听中
public class MyPanel implements FocusListener{

public void focusGained(FocusEvent e) {

}


public void focusLost(FocusEvent e) {

}
}

JTextField.addFocusListener(new MyPanel());
hardsonxu 2011-03-15
  • 打赏
  • 举报
回复
调整一下实现思路即可,没必要抱着一条不可能的思路不放。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧