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);
}
}