Java Swing中的表格(JTable)和樹(JTree)組件使用實(shí)例
一:表格(JTable):
1.基本概念:
表格(JTable)是Swing 新增加的組件,主要是為了將數(shù)據(jù)以表格的形式顯示.給顯示大塊數(shù)據(jù)提供了簡單的機(jī)制.
2.常用構(gòu)造方法:
* JTable():使用系統(tǒng)默認(rèn)的模型創(chuàng)建一個(gè)JTable 實(shí)例.
* JTable(int numRows,int numColumns):創(chuàng)建一個(gè)使用DefaultTableModel 指定行、列的空表格。
* JTable(Object[ ][ ] rowData,Object[ ][ ] columnNames):創(chuàng)建一個(gè)顯示二維數(shù)據(jù)的表格。
可以直接使用表格列名數(shù)組和表格數(shù)據(jù)數(shù)組來創(chuàng)建表格.
* JTable(TableModel dm):創(chuàng)建一個(gè)指定數(shù)據(jù)模式和默認(rèn)字段模式的JTable 實(shí)例。
通常用數(shù)據(jù)模型類的對(duì)象來保存數(shù)據(jù),而表格模型是通過表格列名數(shù)組和表格數(shù)據(jù)數(shù)組來創(chuàng)建的.
3.常用方法:
4.綜合案例:
代碼1:
public class JTableDemo1 extends JFrame {
//定義表格
JTable table;
//定義滾動(dòng)條面板(用以使表格可以滾動(dòng))
JScrollPane scrollPane;
//定義數(shù)據(jù)模型類的對(duì)象(用以保存數(shù)據(jù)),
DefaultTableModel tableModel;
public JTableDemo1() {
super();
setTitle("表格模型與表格");
scrollPane = new JScrollPane();
// 定義表格列名數(shù)組
String[] columnNames = { "A", "B","C" };
// 定義表格數(shù)據(jù)數(shù)組
String[][] tableValues = { { "A1", "B1","C1" }, { "A2", "B2","C2" },
{ "A3", "B3","C3" }, { "A4", "B4","C4" } };
// 創(chuàng)建指定表格列名和表格數(shù)據(jù)的表格模型類的對(duì)象
tableModel = new DefaultTableModel(tableValues, columnNames);
// 創(chuàng)建指定表格模型的表格
table = new JTable(tableModel);
//設(shè)置 RowSorter(RowSorter 用于提供對(duì) JTable 的排序和過濾)。
table.setRowSorter(new TableRowSorter<DefaultTableModel>(tableModel));
scrollPane.setViewportView(table);
getContentPane().add(scrollPane, BorderLayout.CENTER);
setBounds(300, 200, 400, 300);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String args[]) {
new JTableDemo1();
}
}
截圖1:
代碼2:
import java.awt.*;
import javax.swing.*;
public class JTableDemo3 {
JFrame frame;
JPanel panel;
JScrollPane scrollPane1, scrollPane2, scrollPane3;
JTable jtable1, jtable2, jtable3;
public JTableDemo3() {
frame = new JFrame("JTableDemo");
jtable1 = new JTable(8, 6);
final Object[] columnNames = { "姓名", "性別", "家庭地址",// 列名最好用final修飾
"電話號(hào)碼", "生日", "工作", "收入", "婚姻狀況", "戀愛狀況" };
Object[][] rowData = {
{ "ddd", "男", "江蘇南京", "1378313210", "03/24/1985", "學(xué)生", "寄生中",
"未婚", "沒" },
{ "eee", "女", "江蘇南京", "13645181705", "xx/xx/1985", "家教", "未知",
"未婚", "好象沒" },
{ "fff", "男", "江蘇南京", "13585331486", "12/08/1985", "汽車推銷員",
"不確定", "未婚", "有" },
{ "ggg", "女", "江蘇南京", "81513779", "xx/xx/1986", "賓館服務(wù)員",
"確定但未知", "未婚", "有" },
{ "hhh", "男", "江蘇南京", "13651545936", "xx/xx/1985", "學(xué)生", "流放中",
"未婚", "無數(shù)次分手后沒有" } };
jtable2 = new JTable(rowData, columnNames);
jtable3 = new JTable(rowData, columnNames);
jtable3.setPreferredScrollableViewportSize(new Dimension(600, 100));// 設(shè)置表格的大小
jtable3.setRowHeight(30);// 設(shè)置每行的高度為20
jtable3.setRowHeight(0, 20);// 設(shè)置第1行的高度為15
jtable3.setRowMargin(5);// 設(shè)置相鄰兩行單元格的距離
jtable3.setRowSelectionAllowed(true);// 設(shè)置可否被選擇.默認(rèn)為false
jtable3.setSelectionBackground(Color.white);// 設(shè)置所選擇行的背景色
jtable3.setSelectionForeground(Color.red);// 設(shè)置所選擇行的前景色
jtable3.setGridColor(Color.red);// 設(shè)置網(wǎng)格線的顏色
jtable3.selectAll();// 選擇所有行
jtable3.setRowSelectionInterval(0, 2);// 設(shè)置初始的選擇行,這里是1到3行都處于選擇狀態(tài)
jtable3.clearSelection();// 取消選擇
jtable3.setDragEnabled(false);// 不懂這個(gè)
jtable3.setShowGrid(true);// 是否顯示網(wǎng)格線
jtable3.setShowHorizontalLines(true);// 是否顯示水平的網(wǎng)格線
jtable3.setShowVerticalLines(true);// 是否顯示垂直的網(wǎng)格線
jtable3.setValueAt("tt", 0, 0);// 設(shè)置某個(gè)單元格的值,這個(gè)值是一個(gè)對(duì)象
jtable3.doLayout();
jtable3.setBackground(Color.cyan);
// JTable最好加在JScrollPane上以實(shí)現(xiàn)滾動(dòng)效果
scrollPane1 = new JScrollPane(jtable1);
scrollPane2 = new JScrollPane(jtable2);
scrollPane3 = new JScrollPane(jtable3);
panel = new JPanel(new GridLayout(0, 1));
panel.setPreferredSize(new Dimension(600, 400));
panel.setBackground(Color.black);
panel.add(scrollPane1);
panel.add(scrollPane2);
panel.add(scrollPane3);
frame.setContentPane(panel);
frame.pack();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new JTableDemo3();
}
}
截圖2:
二:樹(JTree):
1.基本概念:
樹(JTree):將分層數(shù)據(jù)集顯示為輪廓的控件。
2.常用構(gòu)造方法:
JTree():返回帶有示例模型的JTree。
JTree(Object[] value):返回JTree,指定數(shù)組的每個(gè)元素作為不被顯示的新根節(jié)點(diǎn)的子節(jié)點(diǎn)。
//只有這個(gè)構(gòu)造函數(shù)可以創(chuàng)建多個(gè)根結(jié)點(diǎn)
JTree(Object[] value):返回 JTree,指定數(shù)組的每個(gè)元素作為不被顯示的新根節(jié)點(diǎn)的子節(jié)點(diǎn)。
JTree(TreeNode root):返回 JTree,指定的 TreeNode 作為其根,它顯示根節(jié)點(diǎn)。
JTree(TreeNode root, boolean asksAllowsChildren):返回 JTree,指定的 TreeNode 作為其根,
它用指定的方式顯示根節(jié)點(diǎn),并確定節(jié)點(diǎn)是否為葉節(jié)點(diǎn)。(true設(shè)置為可添加孩子結(jié)點(diǎn),再添加孩子結(jié)點(diǎn)).
3.代碼演示:
示例1:
public class JTreeDemo1 {
JFrame f;
Box box;
JTree jTree1,jTree2;
public JTreeDemo1()
{
f = new JFrame(" JTreeDemo1 ");
box = Box.createHorizontalBox(); //創(chuàng)建Box 類對(duì)象
jTree1 = new JTree();
jTree2 = new JTree();
//向此組件添加任意的鍵/值
jTree1.putClientProperty("JTree.lineStyle", "Angled");
//向Box 容器添加滾動(dòng)面板
box.add(new JScrollPane(jTree1), BorderLayout.WEST);
box.add(new JScrollPane(jTree2), BorderLayout.EAST);
f.getContentPane().add(box, BorderLayout.CENTER);
f.setSize(300, 240);
//f.pack();
f.setLocation(300, 200);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new JTreeDemo1();
}
}
截圖1:
示例2:
public class JTreeDemo2 {
JFrame f;
JPanel p;
JTree jTree1,jTree2,jTree3,jTree4,jTree5,jTree6,jTree7;
public JTreeDemo2() {
f = new JFrame(" JTreeDemo2 ");
// 構(gòu)造函數(shù):JTree()
jTree1 = new JTree();
// 構(gòu)造函數(shù):JTree(Object[] value)
Object[] letters = { " a ", " b ", " c ", " d ", " e " };
jTree2 = new JTree(letters);
// 構(gòu)造函數(shù):JTree(TreeNode root)(TreeNode空)
// 用空結(jié)點(diǎn)創(chuàng)建樹
DefaultMutableTreeNode node1 = new DefaultMutableTreeNode(); // 定義樹結(jié)點(diǎn)
jTree3 = new JTree(node1); // 用此樹結(jié)點(diǎn)做參數(shù)調(diào)用 JTree的構(gòu)造函數(shù)創(chuàng)建含有一個(gè)根結(jié)點(diǎn)的樹
// 構(gòu)造函數(shù):JTree(TreeNode root)(同上,只是TreeNode非空)
// 用一個(gè)根結(jié)點(diǎn)創(chuàng)建樹
DefaultMutableTreeNode node2 = new DefaultMutableTreeNode(" Color ");
jTree4 = new JTree(node2); // 結(jié)點(diǎn)不可以顏色,默認(rèn)為白面黑字
jTree4.setBackground(Color.lightGray);
// 構(gòu)造函數(shù):JTree(TreeNode root, boolean
// asksAllowsChildren)(同上,只是TreeNode又有不同)
// 使用DefaultMutableTreeNode類先用一個(gè)根結(jié)點(diǎn)創(chuàng)建樹,設(shè)置為可添加孩子結(jié)點(diǎn),再添加孩子結(jié)點(diǎn)
DefaultMutableTreeNode color = new DefaultMutableTreeNode(" Color ",
true);
DefaultMutableTreeNode gray = new DefaultMutableTreeNode(" Gray ");
gray.add(new DefaultMutableTreeNode(" Lightgray "));
gray.add(new DefaultMutableTreeNode(" Darkgray "));
color.add(gray);
color.add(new DefaultMutableTreeNode(" Red "));
color.add(new DefaultMutableTreeNode(" Green "));
jTree5 = new JTree(color);
// 構(gòu)造函數(shù):JTree(TreeNode root)(同上,只是TreeNode非空)
// 通過逐個(gè)添加結(jié)點(diǎn)創(chuàng)建樹
DefaultMutableTreeNode biology = new DefaultMutableTreeNode(" Biology ");
DefaultMutableTreeNode animal = new DefaultMutableTreeNode(" Animal ");
DefaultMutableTreeNode mammal = new DefaultMutableTreeNode(" Mammal ");
DefaultMutableTreeNode horse = new DefaultMutableTreeNode(" Horse ");
mammal.add(horse);
animal.add(mammal);
biology.add(animal);
jTree6 = new JTree(biology);
horse.isLeaf();
horse.isRoot();
// 構(gòu)造函數(shù):JTree(TreeModel newModel)
// 用DefaultMutableTreeNodel類定義一個(gè)結(jié)點(diǎn)再用這個(gè)結(jié)點(diǎn)做參數(shù)定義一個(gè)用DefaultTreeMode
// 創(chuàng)建一個(gè)樹的模型,再用JTree的構(gòu)造函數(shù)創(chuàng)建一個(gè)樹
DefaultMutableTreeNode root = new DefaultMutableTreeNode(" Root1 ");
DefaultMutableTreeNode child1 = new DefaultMutableTreeNode(" Child1 ");
DefaultMutableTreeNode child11 = new DefaultMutableTreeNode(" Child11 ");
DefaultMutableTreeNode child111 = new DefaultMutableTreeNode(
" Child111 ");
root.add(child1);
child1.add(child11);
child11.add(child111);
DefaultTreeModel model = new DefaultTreeModel(root);
jTree7 = new JTree(model);
p = new JPanel();
p.setLayout(new BoxLayout(p, BoxLayout.X_AXIS));
p.setPreferredSize(new Dimension(700, 400));
// JTree必須放在JScrollPane上
p.add(new JScrollPane(jTree1));
p.add(new JScrollPane(jTree2));
p.add(new JScrollPane(jTree3));
p.add(new JScrollPane(jTree4));
p.add(new JScrollPane(jTree5));
p.add(new JScrollPane(jTree6));
p.add(new JScrollPane(jTree7));
f.setContentPane(p);
f.pack();
f.setLocation(300, 200);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new JTreeDemo2();
}
}
截圖2:
- 如何實(shí)現(xiàn)java遞歸 處理權(quán)限管理菜單樹或分類
- Java遞歸遍歷樹形結(jié)構(gòu)的實(shí)現(xiàn)代碼
- java實(shí)現(xiàn)構(gòu)造無限層級(jí)樹形菜單
- java 實(shí)現(xiàn)簡單圣誕樹的示例代碼(圣誕節(jié)快樂)
- Java構(gòu)建樹形菜單的實(shí)例代碼(支持多級(jí)菜單)
- Java Swing樹狀組件JTree用法實(shí)例詳解
- Java遍歷輸出指定目錄、樹形結(jié)構(gòu)所有文件包括子目錄下的文件
- JSON復(fù)雜數(shù)據(jù)處理之Json樹形結(jié)構(gòu)數(shù)據(jù)轉(zhuǎn)Java對(duì)象并存儲(chǔ)到數(shù)據(jù)庫的實(shí)現(xiàn)
- Java實(shí)現(xiàn)的決策樹算法完整實(shí)例
- java分類樹,我從2s優(yōu)化到0.1s
相關(guān)文章
spring mvc使用@InitBinder標(biāo)簽對(duì)表單數(shù)據(jù)綁定的方法
這篇文章主要介紹了spring mvc使用@InitBinder標(biāo)簽對(duì)表單數(shù)據(jù)綁定的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-03-03Java list如何根據(jù)id獲取子節(jié)點(diǎn)
這篇文章主要介紹了Java list如何根據(jù)id獲取子節(jié)點(diǎn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03Java創(chuàng)建多線程的幾種方式實(shí)現(xiàn)
這篇文章主要介紹了Java創(chuàng)建多線程的幾種方式實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10SpringBoot實(shí)現(xiàn)單文件與多文件上傳
本次例子不基于第三方存儲(chǔ)(如七牛云對(duì)象存儲(chǔ)、阿里云對(duì)象存儲(chǔ)、騰訊云對(duì)象存儲(chǔ)等),僅基于本地存儲(chǔ)。本文主要內(nèi)容如下:公共文件存儲(chǔ)代碼;單文件上傳代碼;多文件上傳代碼2021-05-05Java實(shí)現(xiàn)計(jì)算一個(gè)月有多少天和多少周
這篇文章主要介紹了Java實(shí)現(xiàn)計(jì)算一個(gè)月有多少天和多少周,本文直接給出實(shí)例代碼,需要的朋友可以參考下2015-06-06一天時(shí)間用Java寫了個(gè)飛機(jī)大戰(zhàn)游戲,朋友直呼高手
前兩天我發(fā)現(xiàn)論壇有兩篇飛機(jī)大戰(zhàn)的文章異?;鸨?但都是python寫的,竟然不是我大Java,說實(shí)話作為老java選手,我心里是有那么一些失落的,難道我大java打飛機(jī)不行?今天特地整理了這篇文章,需要的朋友可以參考下2021-05-05