建立頭部頁籤 ,頁籤是一個容器
- 建立頁籤容器,用new的方式,并将其添加到頂層容器中,估計也可以添加到分隔面闆中也可以
- 建立面闆,每個頁籤中放一個面闆
- 頁籤容器添加面闆,12345面闆,設定(編号,名稱)作為顯示順序
package PanelDemo;
import javax.swing.*;
import java.awt.*;
/**
* Created with IntelliJ IDEA.
*
* @Author: 從南到北
* @Date: 11/30/2021/11:21
* @Description:
*/
public class MyJtab extends JFrame {
public MyJtab() {
setTitle("頁籤容器");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
JTabbedPane tabbedPane= new JTabbedPane(); //建立一個頁籤容器
setContentPane(tabbedPane); //将之添加到頂層容器内
JPanel P1=new JPanel();
JPanel P2=new JPanel();
JPanel P3=new JPanel();
Label a1 = new Label("内容1");
Button b2 = new Button("内容2");
Label a3 = new Label("内容3");
P1.add(a1);
P2.add(b2);
P3.add(a3);
//添加頁籤容器,并且設定其中每一個頁籤的标簽以及是否可啟用
tabbedPane.addTab("頁籤1",P1);
// 設定 index 位置的頁籤是否可用
// tabbedPane.setEnabledAt(0,true);
// 設定 index 位置的頁籤的标題
// tabbedPane.setTitleAt(0,"個人收入狀況");
tabbedPane.addTab("頁籤2",P2);
// tabbedPane.setEnabledAt(1,true);
// tabbedPane.setTitleAt(1,"工資");
tabbedPane.addTab("頁籤3",P3);
// tabbedPane.setEnabledAt(2,true);
// tabbedPane.setTitleAt(2,"獎金");
// 設定預設選中的頁籤
tabbedPane.setSelectedIndex(1);
// setSize(500,300);
tabbedPane.setPreferredSize(new Dimension(500,200));
pack();
}
}
public class MyDemo {
public static void main(String[] args) {
MyJtab myJtab = new MyJtab();
}
}

參考連結:
http://c.biancheng.net/view/1263.html
package Tree;
import javax.swing.*;
import javax.swing.event.TreeModelEvent;
import javax.swing.event.TreeModelListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;
import java.awt.*;
/**
* Created with IntelliJ IDEA.
*
* @Author: 從南到北
* @Date: 11/26/2021/11:11
* @Description:
* 首先,把樹和按鈕,放置到一個面闆中
*
* 可算是搞出來了!!!!
*
*/
public class TreePre extends JFrame implements TreeModelListener {
DefaultMutableTreeNode root =new DefaultMutableTreeNode("今天要買的東西");
//使用DefaultMutableTreeNode建立4個枝節點
DefaultMutableTreeNode node1 =new DefaultMutableTreeNode("蔬菜");
DefaultMutableTreeNode node2 =new DefaultMutableTreeNode("水果");
DefaultMutableTreeNode node3 =new DefaultMutableTreeNode("禮品");
DefaultMutableTreeNode node4 =new DefaultMutableTreeNode("家用小物品");
//定義按鈕,完成操作
JButton addSiblingBtn = new JButton("添加兄弟結點");
JButton addChildBtn = new JButton("添加子結點");
JButton deleteBtn = new JButton("删除結點");
JButton editBtn = new JButton("編輯目前結點");
public TreePre(){
setTitle("購物清單");
JPanel panel = new JPanel(); //建立中間容器
// setContentPane(panel); //添加中間容器
//将4個枝節點添加到根節點
root.add(node1);
root.add(node2);
root.add(node3);
root.add(node4);
//使用其建立葉節點,并且将葉子節點添加到不同的枝節點上
DefaultMutableTreeNode baicai =new DefaultMutableTreeNode("白菜");
node1.add(baicai);
DefaultMutableTreeNode dasuan = new DefaultMutableTreeNode("大蒜");
node1.add(dasuan);
DefaultMutableTreeNode tudou = new DefaultMutableTreeNode("洋芋");
node1.add(tudou);
DefaultMutableTreeNode pingguo = new DefaultMutableTreeNode("蘋果");
node2.add(pingguo);
DefaultMutableTreeNode xiangjiao = new DefaultMutableTreeNode("香蕉");
node2.add(xiangjiao);
DefaultMutableTreeNode xigua = new DefaultMutableTreeNode("西瓜");
node2.add(xigua);
DefaultMutableTreeNode lipin = new DefaultMutableTreeNode("禮品");
node3.add(lipin);
DefaultMutableTreeNode maotai = new DefaultMutableTreeNode("茅台酒");
node3.add(maotai);
DefaultMutableTreeNode maipian = new DefaultMutableTreeNode("營養麥片");
node3.add(maipian);
DefaultMutableTreeNode shipin = new DefaultMutableTreeNode("保健食品");
node3.add(shipin);
DefaultMutableTreeNode weijing = new DefaultMutableTreeNode("味精");
node4.add(weijing);
DefaultMutableTreeNode jiangyou = new DefaultMutableTreeNode("醬油");
node4.add(jiangyou);
DefaultMutableTreeNode xijiejing = new DefaultMutableTreeNode("洗潔精");
node4.add(xijiejing);
DefaultMutableTreeNode baoxiandai = new DefaultMutableTreeNode("保鮮袋");
node4.add(baoxiandai);
JTree tree = new JTree(root); //建立一個系統預設的樹元件
tree.setEditable(true); //設定JTree為可編輯
DefaultTreeModel model = (DefaultTreeModel) tree.getModel();
addSiblingBtn.addActionListener(e -> {
//添加兄弟結點的邏輯
// 1, 擷取目前選中節點
// DefaultMutableTreeNode這個是一個實作類
DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
//如果結點為空,則直接傳回
if (selectedNode == null){
return;
}
// 2,擷取該選中結點的父結點
DefaultMutableTreeNode parent = (DefaultMutableTreeNode)selectedNode.getParent();
//如果父結點為空,則直接傳回
if (parent==null){
return;
}
// 3,建立一個新結點
DefaultMutableTreeNode newNode = new DefaultMutableTreeNode("新結點");
// 4,把新結點通過父結點進行添加
//擷取選中結點的索引
int selectedIndex = parent.getIndex(selectedNode);
//在選中位置插入新結點
model.insertNodeInto(newNode,parent,selectedIndex);
// 5,顯示新結點
//擷取從根結點到新結點的所有結點,這個函數是傳回從根節點到newNode新節點的路徑
TreeNode[] pathToRoot = model.getPathToRoot(newNode);
//使用指定的結點數組建立TreePath
TreePath treePath = new TreePath(pathToRoot);
//顯示指定的treePath
tree.scrollPathToVisible(treePath); //将視野移動到這個新節點
//6,重繪tree
tree.updateUI();
// label.setText("新增節點成功");
});
/**
* 添加子節點
*/
addChildBtn.addActionListener(e -> { //蘭姆達表達式寫法,會更友善點
//為選中節點添加子節點
//1,擷取選中結點
DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
if (selectedNode==null){
return ;
}
//2,建立新結點
DefaultMutableTreeNode newNode = new DefaultMutableTreeNode("新結點");
//3,把新節點添加到目前節點中
//model.insertNodeInto(newNode,selectedNode,selectedNode.getChildCount());使用TreeModel的方法添加,不需要手動重新整理UI
selectedNode.add(newNode);//使用TreeNode的方法添加,需要手動重新整理UI
//4,顯示新節點
//顯示新結點
TreeNode[] pathToRoot = model.getPathToRoot(newNode);
TreePath treePath = new TreePath(pathToRoot);
tree.scrollPathToVisible(treePath);
//5,重繪ui
//手動重新整理UI
tree.updateUI();
// label.setText("新增子節點成功");
});
/**
* 删除節點
*/
deleteBtn.addActionListener(e -> {
DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
if (selectedNode!=null && selectedNode.getParent()!=null){
//删的時候要找到其父節點才能删,是以說,最後的那個根節點,不能删
model.removeNodeFromParent(selectedNode);
}
// label.setText("删除節點成功");
});
/**
* 編輯節點
*/
//實作編輯結點的監聽器
editBtn.addActionListener(e -> {
//擷取目前選中節點的路徑
TreePath selectionPath = tree.getSelectionPath();
//判斷路徑不為空,則設定最後一個節點可以編輯
if (selectionPath!=null){
//編輯選中結點
tree.startEditingAtPath(selectionPath);
}
});
//panel用來寫按鈕
panel.add(addSiblingBtn);
panel.add(addChildBtn);
panel.add(deleteBtn);
panel.add(editBtn);
panel.setLayout(new FlowLayout());
/**
* 建立一個面闆,用來裝樹和按鈕
*建立一個分隔欄
*
*/
JPanel panel1 = new JPanel();
// panel1.add(panel,BorderLayout.NORTH);
//
// panel1.add(new JScrollPane(tree),BorderLayout.EAST);
panel1.setLayout(new GridLayout(2,1));
panel1.add(new JScrollPane(tree));
panel1.add(panel);
// add(panel, BorderLayout.NORTH);
// add(new JScrollPane(tree),BorderLayout.CENTER);
JSplitPane js = new JSplitPane();
js.setOneTouchExpandable(true);
js.setContinuousLayout(true);
js.setPreferredSize(new Dimension(300,400));
js.setOrientation(JSplitPane.HORIZONTAL_SPLIT);
js.setDividerSize(1);
js.setDividerLocation(50);
js.setLeftComponent(panel1); //左邊内容
// JPanel panel2 = new JPanel();
JButton jButton = new JButton();
//-------------------
JTabbedPane tabbedPane= new JTabbedPane(); //建立一個頁籤容器
setContentPane(tabbedPane); //将之添加到頂層容器内
JPanel P1=new JPanel();
JPanel P2=new JPanel();
JPanel P3=new JPanel();
Label a1 = new Label("内容1");
Button b2 = new Button("内容2");
Label a3 = new Label("内容3");
P1.add(a1);
P2.add(b2);
P3.add(a3);
//添加頁籤容器,并且設定其中每一個頁籤的标簽以及是否可啟用
tabbedPane.addTab("頁籤1",P1);
// 設定 index 位置的頁籤是否可用
// tabbedPane.setEnabledAt(0,true);
// 設定 index 位置的頁籤的标題
// tabbedPane.setTitleAt(0,"個人收入狀況");
tabbedPane.addTab("頁籤2",P2);
// tabbedPane.setEnabledAt(1,true);
// tabbedPane.setTitleAt(1,"工資");
tabbedPane.addTab("頁籤3",P3);
// tabbedPane.setEnabledAt(2,true);
// tabbedPane.setTitleAt(2,"獎金");
// 設定預設選中的頁籤
tabbedPane.setSelectedIndex(1);
// setSize(500,300);
tabbedPane.setPreferredSize(new Dimension(500,200));
//------------------
js.setRightComponent(tabbedPane); //右邊内容
//将js放到頂層容器中
setContentPane(js);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setVisible(true);
}
public static void main(String[] args) {
new TreePre();
}
@Override
public void treeNodesChanged(TreeModelEvent e) {
}
@Override
public void treeNodesInserted(TreeModelEvent e) {
}
@Override
public void treeNodesRemoved(TreeModelEvent e) {
}
@Override
public void treeStructureChanged(TreeModelEvent e) {
}
}