import javax.swing.*; import java.awt.*; import java.awt.event.*; public class SwingApplication { 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); // 设置按钮的热键为'I' button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { numClicks++; label.setText(labelPrefix + numClicks); // 显示按钮被点击的次数 } }); label.setLabelFor(button); /* 在顶层容器及其内容之间放置空间的常用办法是把内容添加到Jpanel上,而Jpanel本身没有边框的。 */ JPanel pane = new JPanel(); pane.setBorder(BorderFactory.createEmptyBorder(30, // top 30, // left 10, // bottom 30) // right ); 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) { } // 创建顶层容器并添加内容. JFrame frame = new JFrame("SwingApplication"); SwingApplication app = new SwingApplication(); Component contents = app.createComponents(); frame.getContentPane().add(contents, BorderLayout.CENTER); // 窗口设置结束,开始显示 frame.addWindowListener(new WindowAdapter() { // 匿名类用于注册监听器 public void windowClosing(WindowEvent e) { System.exit(0); } }); frame.pack(); frame.setVisible(true); } }