Swing 组件面板
- 常见的 Swing 组件面板包括分割面板(SplitPane)与选项卡面板(JTabbedPane);
1. 分割面板
- SplitPane(分割面版)一次可将两个组件同时显示在两个显示区中,如果要同时在多个显示区显示组件,就必须同时使用多个 SplitPane。JSplitPane 可以设置面板是水平分割还是垂直分割,这需要设置两个常量:HORIZONTAL_SPLIT、VERTICAL_SPLIT。除了这两个重要的常数外,JSplitPane 还提供了许多常量来支撑其功能;
- javax.swing.JSplitPane,详见:Class JSplitPane;
a. 应用:分割面板
import javax.swing.*;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class Test {
public Test() {
JFrame f = new JFrame("Regino");
Container contentPane = f.getContentPane();
JLabel label1 = new JLabel("Label 1", JLabel.CENTER);
label1.setBackground(Color.green);
label1.setOpaque(true);
JLabel label2 = new JLabel("Label 2", JLabel.CENTER);
label2.setBackground(Color.pink);
label2.setOpaque(true);
JLabel label3 = new JLabel("Label 3", JLabel.CENTER);
label3.setBackground(Color.yellow);
label3.setOpaque(true);
JSplitPane splitPane1 = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, false, label1, label2);
splitPane1.setDividerLocation(0.3);
splitPane1.setResizeWeight(0.3);
splitPane1.setOneTouchExpandable(true);
splitPane1.setDividerSize(10);
JSplitPane splitPane2 = new JSplitPane(JSplitPane.VERTICAL_SPLIT, false, splitPane1, label3);
splitPane2.setDividerLocation(35);
splitPane2.setOneTouchExpandable(false);
splitPane2.setDividerSize(5);
contentPane.add(splitPane2);
f.setSize(250, 200);
f.show();
f.addWindowListener(
new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}
);
}
public static void main(String[] args) {
new Test();
}
}
- 效果图:
b. 应用:设置分割面板的属性
import javax.swing.*;
import java.awt.*;
public class Test extends JFrame {
public static void main(String args[]) {
Test frame = new Test();
frame.setVisible(true);
}
public Test() {
super();
setTitle("Regino");
setBounds(100, 100, 500, 375);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JSplitPane hSplitPane = new JSplitPane();
hSplitPane.setDividerLocation(40);
getContentPane().add(hSplitPane, BorderLayout.CENTER);
hSplitPane.setLeftComponent(new JLabel(" 1"));
final JSplitPane vSplitPane = new JSplitPane(
JSplitPane.VERTICAL_SPLIT);
vSplitPane.setDividerLocation(30);
vSplitPane.setDividerSize(8);
vSplitPane.setOneTouchExpandable(true);
vSplitPane.setContinuousLayout(true);
hSplitPane.setRightComponent(vSplitPane);
vSplitPane.setLeftComponent(new JLabel(" 2"));
vSplitPane.setRightComponent(new JLabel(" 3"));
}
}
- 效果图:
2. 选项卡面板
- 选项卡面板由 JTabbedPane 类实现。它实现了一个包含多个选项卡的用户界面,通过它可以将一个复杂的对话框分割成若干个选项卡,实现对信息的分类显示和管理,使界面更加简洁、美观,还可以减少窗体数量;
- javax.swing.JTabbedPane,详见:Class JTabbedPane;
a. 应用:选项卡面板
- 定义一个 JTabbedPaneTest 类,在该类中添加一个 JTabbedPane 类对象,为该类对象添加 6 个选项卡,单击任何一个选项卡,在窗口下方的 JTextField 中显示出相应的选项卡的标题:
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.*;
class JTabbedPaneTest extends JFrame {
private JTabbedPane jtabbedpane = new JTabbedPane();
private JTextField jtextField = new JTextField();
public JTabbedPaneTest(String title) {
super(title);
Container contentPane = this.getContentPane();
jtabbedpane.addTab("第一页", new JPanel());
jtabbedpane.addTab("第二页", new JPanel());
jtabbedpane.addTab("第三页", new JPanel());
jtabbedpane.addTab("第四页", new JPanel());
jtabbedpane.addTab("第五页", new JPanel());
jtabbedpane.addTab("第六页", new JPanel());
jtabbedpane.addChangeListener(new MyChangeListener());
contentPane.add(jtextField, BorderLayout.SOUTH);
contentPane.add(jtabbedpane, BorderLayout.CENTER);
this.setSize(300, 200);
this.setVisible(true);
}
private class MyChangeListener implements ChangeListener {
public void stateChanged(ChangeEvent e) {
String temp = jtabbedpane.getTitleAt(jtabbedpane.getSelectedIndex());
jtextField.setText(temp + "被选择");
}
}
}
public class Test {
public static void main(String[] args) {
new JTabbedPaneTest("Regino");
}
}
- 效果图:
- 可以将创建 JTabbedPane 类对象的无参构造方法修改为
private JTabbedPane jtabbedpane = new JTabbedPane(JTabbedPane.BOTTOM, JTabbedPane.SCROLL_TAB_LAYOUT);
,以达到以下效果:
- 事件处理中有如下一段代码:
String temp = jtabbedpane.getTitleAt(jtabbedpane.getSelectedIndex());
,其中 getSelectedIndex()
方法表示获得当前选择的选项卡的索引值(int 类型,从 0 开始,-1 表示未选中任何选项卡),getTitleAt(index)
方法表示获得索引值为 index 的选项卡的标题;