import javax.swing.*;
import java.awt.*;
import java.awt.event.*;public class Swi
{
private static String labelPrefix="NUMber of button clicks:";
private int numClicks=0;
public Component createComponents()
{
final JLabel label=new JLabel(labelPrefix+"0");
JButton button=new JButton("I'm a Swing button!");
button.setMnemonic(KeyEvent.VK_I);  //这里不明白
button.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
numClicks++;
label.setText(labelPrefix+numClicks);
}
});
label.setLabelFor(button);
JPanel pane=new JPanel();
pane.setBorder(javax.swing.BorderFactory.createEmptyBorder(30,30,10,30));
pane.setLayout(new GridLayout(0,1));
pane.add(button);
pane.add(label);
return pane;
}
public static void main(String []args)
{
try
{
UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
}
catch(Exception e){}  //这个try-catch结构是不是多余的??
JFrame frame = new JFrame("Swing Application");
Swi app=new Swi();
Component contents=app.createComponents();  //这里返回类型为component有什么意义
frame.getContentPane().add(contents,BorderLayout.CENTER);
frame.addWindowListener(new WindowAdapter()  //JFrame自动已经带了关闭窗口功能了吧??
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
frame.pack();
frame.setVisible(true);
}
}

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【sure2003】截止到2008-07-16 15:03:23的历史汇总数据(不包括此帖):
    发帖的总数量:244                      发帖的总分数:10333                    每贴平均分数:42                       
    回帖的总数量:210                      得分贴总数量:6                        回帖的得分率:2%                       
    结贴的总数量:242                      结贴的总分数:10263                    
    无满意结贴数:2                        无满意结贴分:50                       
    未结的帖子数:2                        未结的总分数:70                       
    结贴的百分比:99.18 %               结分的百分比:99.32 %                  
    无满意结贴率:0.83  %               无满意结分率:0.49  %                  
    值得尊敬
      

  2.   

    catch(Exception e){}  //这个try-catch结构是不是多余的??其它的不清楚,上面这个你可以在catch写上log,不是多余,只是说你获取了异常,但你没做任何操作
      

  3.   

    1.  button.setMnemonic(KeyEvent.VK_I);  //这里不明白
    查一下api文档,这个方法好像已经废弃了,不要再用了
    2.trycatch是必须的,否则无法通过编译.自己去掉试一下应该不难.
    3.//这里返回类型为component有什么意义
    没什么意思,就是把返回的panel控件添加到当前的frame中.Component是JPanel的父类.
    4. frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);执行相同的操作,并不是说自带了关闭功能,其实也是以类似的方法关闭程序,不过简化了用户的负担.
      

  4.   

    button.setMnemonic(KeyEvent.VK_I);  //这里不明白
    这个是设置button的快捷键,使用ALT+i键就可以触发这个button的click事件catch(Exception e){}  //这个try-catch结构是不是多余的??
    这个try/catch不是多余的,因为 UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName())这个方法定义了可能抛出的异常有ClassNotFoundException,InstantiationException,IllegalAccessException,UnsupportedLookAndFeelException
    所有不是多余的,如果你在这里不catch异常的话,那么就需要在main方法上throws这些异常。Component contents=app.createComponents();  //这里返回类型为component有什么意义
    这个返回的component是为下面那句frame.getContentPane().add(contents,BorderLayout.CENTER);做准备的,
    因为frame的getContentPane方法返回的是java.awt.Container对象,而Container对象的add方法需要传入的参数就是Component 类型的frame.addWindowListener(new WindowAdapter()  //JFrame自动已经带了关闭窗口功能了吧??JFrame是自带了,但是需要你设置才能生效,也可以说没有自带。设置的方法还有一种就是:
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      

  5.   

     button.setMnemonic(KeyEvent.VK_I);  //这里不明白是以I为快捷键的意思
    setMnemonic
    public void setMnemonic(int mnemonic)设置当前模型上的键盘助记符。助记符是某种键,它与外观的无鼠标修饰符(通常是 Alt)组合时(如果焦点被包含在此按钮祖先窗口中的某个地方)将激活此按钮。 
      

  6.   

    setDefaultCloseOperation会设置一个内部JFrame内部的一个成员 private int defaultCloseOperation = HIDE_ON_CLOSE;
    JFrame中下面的方法根据defaultCloseOperation 的值执行相应的操作,具体的操作你可以在类层次结构中进行跟踪
    protected void processWindowEvent(WindowEvent e) {
            super.processWindowEvent(e);        if (e.getID() == WindowEvent.WINDOW_CLOSING) {
                switch(defaultCloseOperation) {
                  case HIDE_ON_CLOSE:
                     setVisible(false);
                     break;
                  case DISPOSE_ON_CLOSE:
                     setVisible(false);
                     dispose();
                     break;
                  case DO_NOTHING_ON_CLOSE:
                     default: 
                     break;
          case EXIT_ON_CLOSE:
                      // This needs to match the checkExit call in
                      // setDefaultCloseOperation
    System.exit(0);
    break;
                }
            }
      

  7.   

    setMnemonic
    public void setMnemonic(int mnemonic)设置当前模型上的键盘助记符。助记符是某种键,它与外观的无鼠标修饰符(通常是 Alt)组合时(如果焦点包含在此按钮祖先窗口中的某个地方)将激活此按钮。 
    一个助记符必须对应键盘上的一个键,并且应该使用 java.awt.event.KeyEvent 中定义的 VK_XXX 键代码之一指定。助记符是不区分大小写的,所以具有相应键代码的键事件将造成按钮被激活,不管是否按下 Shift 修饰符。 如果在按钮的标签字符串中发现由助记符定义的字符,则第一个出现的助记符将是带下划线的,以向用户指示该助记符。 
      

  8.   

    1,catch(Exception e){}  //你为什么不在控制台上打出来呀??
    2,button.setMnemonic(KeyEvent.VK_I);  //designed to handle character values which fall 功夫 between 'a' and 'z' or 'A' and 'Z'
    3,Component contents=app.createComponents();  //下面要用的呀!!返回一个容器
    4,frame.addWindowListener(new WindowAdapter()//swing中是事件触发,不加这个是关不了的.