Swing组件(如JButton)的焦点问题。(留分没有用,散了) 有分也不能浪费啊! 为什么不自己查javadoc?实现接口java.awt.FocusListener就可以了. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 对不起, 上面写错了. 应该是java.awt.event.FocusListener顺便提一句, 与事件有关的类大部分在java.awt.event包里, 查JComponent没用.FocusListener接口有二个方法: focusGained(FocusEvent e), focusLost(FocusEvent e), 接收一个FocusEvent参数, 用来处理组件获得焦点和失去焦点的行为的. JButton.addFocusListener();focusGained(FocusEvent e); // 得到焦点时focusLost(FocusEvent e); // 失去焦点时 1、java中监听事件使用的是监听器模式,把要监听的组件向监听器注册,当事件发生事,监听器收到信息,调用相应的方法处理。楼主所说的组件的监听器就是java.awt.event.FocusListener,负责具体处理事件的方法就是focusGained(FocusEvent e), focusLost(FocusEvent e)。2、想重做GUI,有两种方法,一种是继承JButton,自己定义该类的具体实现,第二种就是调用已有的API改变按钮的外观。 to zxmzfbdc1.我已经大概清楚了,一直不知道有FocusListener啊(汗...)2.你能不能说清楚一点呢,比如我要改变点击按钮时的外观,可以重载paintComponent(Graphics g)方法,但获得焦点时的虚线框是在哪里画的呢? java.awt.event.FocusListener改外观package Stockman.SystemFramework;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Style extends Frame{ JButton java,mac,motif,win; public Style(){ super("Toolbar Example(Sqing)"); setSize(450,250); JPanel lnfPanel=new JPanel(); lnfPanel.setLayout(new FlowLayout(FlowLayout.LEFT)); LnFListener lnfListener=new LnFListener(this); mac=new JButton("Mac"); mac.addActionListener(lnfListener); java=new JButton("Metal"); java.addActionListener(lnfListener); motif=new JButton("Motif"); motif.addActionListener(lnfListener); win=new JButton("Windows"); win.addActionListener(lnfListener); lnfPanel.add(mac); lnfPanel.add(java); lnfPanel.add(motif); lnfPanel.add(win); add(lnfPanel,BorderLayout.SOUTH); } public static void main(String args[]){ Style style=new Style(); style.setVisible(true); }}class LnFListener implements ActionListener{ Frame frame; public LnFListener(Frame f){ frame=f; } public void actionPerformed(ActionEvent e){ String lnfName=null; if(e.getActionCommand().equals("Mac")){ lnfName="com.apple.mrj.swing.MacLookAndFeel"; } else if(e.getActionCommand().equals("Metal")){ lnfName="javax.swing.plaf.metal.MetalLookAndFeel"; } else if(e.getActionCommand().equals("Motif")){ lnfName="com.sun.java.swing.plaf.motif.MotifLookAndFeel"; } else if(e.getActionCommand().equals("Windows")){ lnfName="com.sun.java.swing.plaf.windows.WindowsLookAndFeel"; } else{ System.err.println("Unreconized L&F request action:"+e.getActionCommand()); return; } try{ UIManager.setLookAndFeel(lnfName); SwingUtilities.updateComponentTreeUI(frame); } catch(UnsupportedLookAndFeelException ex1){ System.err.println("Unsupported LookAndFeel:"+lnfName); } catch(ClassNotFoundException ex2){ System.err.println("LookAndFeel class not found:"+lnfName); } catch(InstantiationException ex3){ System.err.println("Could not load LookAndFeel:"+lnfName); } catch(IllegalAccessException ex4){ System.err.println("Cannot use LookAndFeel:"+lnfName); } }} zxmzfbdc(也速该把阿秃儿) 楼上说的不错!不过楼主你要是想知道更深的话,那你就必须去看jdk!因为光靠说是说不明白的!你只要在jdk中去找FocusListener就可以了! 算了,结帖了,尤其感谢Dan1980 电脑出现了一点小问题! 帮小弟看下这个匿名内部类的程序 有些地方不懂 在线等答案 swing 的问题 Java读取属性文件的问题 菜鸟提问! JAVA汉化的问题 如何用方向键实现TAB键的切换功能? 校园网上不了国际网啊哪位好心人有java文档麻烦传给我一个啊 请问如何安装JAVA编译器啊? 100分,求救-webshpere里面如何调用CGI??在先等待,解决就结帖。 java的applet问题? [高手注意] 请高手看看ImageIO的问题!
focusGained(FocusEvent e); // 得到焦点时
focusLost(FocusEvent e); // 失去焦点时
楼主所说的组件的监听器就是java.awt.event.FocusListener,负责具体处理事件的方法就是
focusGained(FocusEvent e), focusLost(FocusEvent e)。2、想重做GUI,有两种方法,一种是继承JButton,自己定义该类的具体实现,第二种就是调用已有的API改变按钮的外观。
1.我已经大概清楚了,一直不知道有FocusListener啊(汗...)
2.你能不能说清楚一点呢,比如我要改变点击按钮时的外观,可以重载paintComponent(Graphics g)方法,但获得焦点时的虚线框是在哪里画的呢?
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Style extends Frame{
JButton java,mac,motif,win;
public Style(){
super("Toolbar Example(Sqing)");
setSize(450,250);
JPanel lnfPanel=new JPanel();
lnfPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
LnFListener lnfListener=new LnFListener(this);
mac=new JButton("Mac");
mac.addActionListener(lnfListener);
java=new JButton("Metal");
java.addActionListener(lnfListener);
motif=new JButton("Motif");
motif.addActionListener(lnfListener);
win=new JButton("Windows");
win.addActionListener(lnfListener);
lnfPanel.add(mac);
lnfPanel.add(java);
lnfPanel.add(motif);
lnfPanel.add(win);
add(lnfPanel,BorderLayout.SOUTH);
}
public static void main(String args[]){
Style style=new Style();
style.setVisible(true);
}
}
class LnFListener implements ActionListener{
Frame frame;
public LnFListener(Frame f){
frame=f;
}
public void actionPerformed(ActionEvent e){
String lnfName=null;
if(e.getActionCommand().equals("Mac")){
lnfName="com.apple.mrj.swing.MacLookAndFeel";
}
else if(e.getActionCommand().equals("Metal")){
lnfName="javax.swing.plaf.metal.MetalLookAndFeel";
}
else if(e.getActionCommand().equals("Motif")){
lnfName="com.sun.java.swing.plaf.motif.MotifLookAndFeel";
}
else if(e.getActionCommand().equals("Windows")){
lnfName="com.sun.java.swing.plaf.windows.WindowsLookAndFeel";
}
else{
System.err.println("Unreconized L&F request action:"+e.getActionCommand());
return;
}
try{
UIManager.setLookAndFeel(lnfName);
SwingUtilities.updateComponentTreeUI(frame);
}
catch(UnsupportedLookAndFeelException ex1){
System.err.println("Unsupported LookAndFeel:"+lnfName);
}
catch(ClassNotFoundException ex2){
System.err.println("LookAndFeel class not found:"+lnfName);
}
catch(InstantiationException ex3){
System.err.println("Could not load LookAndFeel:"+lnfName);
}
catch(IllegalAccessException ex4){
System.err.println("Cannot use LookAndFeel:"+lnfName);
}
}
}
因为光靠说是说不明白的!你只要在jdk中去找FocusListener就可以了!