Java Swing

import java.awt.*;
import java.awt.event.*;  // 事件机制

import javax.swing.*;

FlowLayout “如果可能,一字排开;位置不够,自动换行”

public class TestFlowLayout {
    public static void main(String[] args) {
        JFrame f = new JFrame("Frame Layout");
        JButton button1 = new JButton("确定");
        JButton button2 = new JButton("打开");
        JButton button3 = new JButton("关闭");
        JButton button4 = new JButton("取消");
        f.setLayout(new FlowLayout());

        f.add(button1);
        f.add(button2);
        f.add(button3);
        f.add(button4);

        f.setSize(100, 100);
        f.setVisible(true);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

BorderLayout “按东南西北排列”

import javax.swing.*;
import java.awt.*;

public class BorderLayoutWindow extends JFrame {
    public BorderLayoutWindow() {
        setLayout(new BorderLayout());
        add(new JButton("North"), BorderLayout.NORTH);
        add(new JButton("South"), BorderLayout.SOUTH);
        add(new JButton("West"), BorderLayout.WEST);
        add(new JButton("East"), BorderLayout.EAST);
        add(new JButton("Center"), BorderLayout.CENTER);
    }

    public static void main(String[] args) {
        BorderLayoutWindow window = new BorderLayoutWindow();
        window.setTitle("BorderLayout Application");
        window.pack();
        window.setVisible(true);
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

GridLayout “构造指定行列的网格,在网格中排列组件”

import javax.swing.*;
import java.awt.*;

public class GridLayoutWindow extends JFrame {
    GridLayoutWindow() {
        setLayout(new GridLayout(3, 2));  // 在3行2列的网格中排列组件
        for (int i = 1; i <= 6; ++i) {
            add(new JButton(new Integer(i).toString()));
        }
    }

    public static void main(String[] args) {
        GridLayoutWindow window = new GridLayoutWindow();
        window.setTitle("GridLayout Application");
        window.pack();
        window.setVisible(true);
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

ActionListener

public class TestActionEvent {
    public static void main(String[] args) {
        JFrame f = new JFrame("Test");

        JButton minusBtn = new JButton("-");
        JButton plusBtn = new JButton("+");
        JLabel counterLb = new JLabel("0", JLabel.CENTER);

        Monitor monitor = new Monitor();
        monitor.setCounterLabel(counterLb);
        minusBtn.setActionCommand("-");
        minusBtn.addActionListener(monitor);
        plusBtn.setActionCommand("+");
        plusBtn.addActionListener(monitor);

        f.setLayout(new GridLayout());
        f.add(minusBtn);
        f.add(counterLb);
        f.add(plusBtn);
        f.pack();
        f.setVisible(true);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

class Monitor implements ActionListener {
    int counter = 0;
    JLabel counterLabel;

    public void setCounterLabel(JLabel label) {
        this.counterLabel = label;
    }

    private void updateCounterLabel() {
        if (counterLabel != null) {
            counterLabel.setText(new Integer(counter).toString());
        }
    }

    public void actionPerformed(ActionEvent e) {
        String command = e.getActionCommand();
        if (command.equals("-")) {
            if (counter > 0) {
                counter--;
            }
        } else if (command.equals("+")) {
            counter++;
        }
        updateCounterLabel();
    }
}

MenuBar, Menu and MenuItem “可以在Menu中添加Menu以实现菜单的嵌套”

public class MenuTest {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Window with Menu");
        JMenuBar menuBar = new JMenuBar();
        frame.setJMenuBar(menuBar);

        JMenu menu1 = new JMenu("File");
        JMenu menu2 = new JMenu("Edit");
        JMenu menu3 = new JMenu("Help");
        menuBar.add(menu1);
        menuBar.add(menu2);
        menuBar.add(menu3);

        menu1.add(new JMenuItem("New"));
        menu1.add(new JMenuItem("Save"));
        menu1.add(new JMenuItem("Load"));
        menu1.addSeparator();
        menu1.add(new JMenuItem("Quit"));

        frame.pack();
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}