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();
}
}
- 效果圖:
![11]()
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"));
}
}
- 效果圖:
![12]()
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");
}
}
- 效果圖:
![21]()
- 可以將創建 JTabbedPane 類對象的無參構造方法修改爲
private JTabbedPane jtabbedpane = new JTabbedPane(JTabbedPane.BOTTOM, JTabbedPane.SCROLL_TAB_LAYOUT);
,以達到以下效果:
![22]()
- 事件處理中有如下一段代碼:
String temp = jtabbedpane.getTitleAt(jtabbedpane.getSelectedIndex());
,其中 getSelectedIndex()
方法表示獲得當前選擇的選項卡的索引值(int 類型,從 0 開始,-1 表示未選中任何選項卡),getTitleAt(index)
方法表示獲得索引值爲 index 的選項卡的標題;