java JFrame中关于按钮焦点问题使 按钮文字和背景换颜色的疑问
作业:在界面上放2个按钮:登录和退出,焦点到达某个按钮上,该按钮背景变为黄色,文字变为红色,如果失去焦点,就显示为一个普通按钮。下面是我写的代码,但是达不到要求impor...
作业:在界面上放2个按钮:登录和退出,焦点到达某个按钮上,该按钮背景变为黄色,文字变为红色,如果失去焦点,就显示为一个普通按钮。
下面是我写的代码,但是达不到要求
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class FocusEventTest extends JFrame implements FocusListener{
JButton login=new JButton("登录");
JButton exit=new JButton("退出");
public FocusEventTest(){
this.setTitle("会变色的按钮框");
this.setLayout(new FlowLayout());
this.add(login);
this.add(exit);
this.setVisible(true);
this.setSize(200, 80);
login.addFocusListener(this);
exit.addFocusListener(this);
}
public void focusGained(FocusEvent e){
if(e.getSource()==login){
login.setForeground(Color.red);
exit.setBackground(Color.yellow);
this.getContentPane().setBackground(Color.red);
}
if(e.getSource()==exit){
exit.setForeground(Color.red);
login.setBackground(Color.yellow);
this.getContentPane().setBackground(Color.red);
}
}
public void focusLost(FocusEvent e){
}
public static void main(String args[]){
new FocusEventTest();
}
}
我的疑问是为神马运行了我的界面背景就马上变为红色,而且那个登录按钮是黄色的,点击了退出按钮,按钮就变为黄色,变不回来了。怎么实现题目的要求,各路大神,在我代码基础上修改吧,谢谢了 展开
下面是我写的代码,但是达不到要求
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class FocusEventTest extends JFrame implements FocusListener{
JButton login=new JButton("登录");
JButton exit=new JButton("退出");
public FocusEventTest(){
this.setTitle("会变色的按钮框");
this.setLayout(new FlowLayout());
this.add(login);
this.add(exit);
this.setVisible(true);
this.setSize(200, 80);
login.addFocusListener(this);
exit.addFocusListener(this);
}
public void focusGained(FocusEvent e){
if(e.getSource()==login){
login.setForeground(Color.red);
exit.setBackground(Color.yellow);
this.getContentPane().setBackground(Color.red);
}
if(e.getSource()==exit){
exit.setForeground(Color.red);
login.setBackground(Color.yellow);
this.getContentPane().setBackground(Color.red);
}
}
public void focusLost(FocusEvent e){
}
public static void main(String args[]){
new FocusEventTest();
}
}
我的疑问是为神马运行了我的界面背景就马上变为红色,而且那个登录按钮是黄色的,点击了退出按钮,按钮就变为黄色,变不回来了。怎么实现题目的要求,各路大神,在我代码基础上修改吧,谢谢了 展开
展开全部
你写的代码没有把颜色给回原来颜色!
可以如下, 加上defaultForeground, defaultBackground, 并在constructor中记录button原来的颜色, 在button失去focus时,改回原来颜色!
因为只用到button, 并且所有拦槐磨button在得到焦点时都是同一文字/背景颜色, 在失去焦点时也简斗都是同一文字明虚/背景颜色, 所以不需要在focusGained()或focusLost()中检验是那一个button获得或失去焦点!
..
Color defaultForeground;
Color defaultBackground;
..
public FocusEventTest (){
...
defaultForeground = login.getForeground();
defaultBackground = login.getBackground();
}
public void focusGained(FocusEvent e){
JButton bt = (JButton)e.getSource();
bt.setForeground(Color.red);
bt.setBackground(Color.yellow);
}
public void focusLost(FocusEvent e){
JButton bt = (JButton)e.getSource();
bt.setForeground(defaultForeground);
bt.setBackground(defaultBackground);
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询