(總結)Swing組件的使用---表格(JTable)和樹(JTree)

                                                                                 Swing組件的使用---表格(JTable)和樹(JTree)

一:表格(JTable):

  1.基本概念:

    表格(JTable)是Swing 新增加的組件,主要是爲了將數據以表格的形式顯示.給顯示大塊數據提供了簡單的機制.

  2.常用構造方法:

 * JTable():使用系統默認的模型創建一個JTable 實例.
 * JTable(int numRows,int numColumns):創建一個使用DefaultTableModel 指定行、列的空表格。
 * JTable(Object[ ][ ] rowData,Object[ ][ ] columnNames):創建一個顯示二維數據的表格。

           可以直接使用表格列名數組和表格數據數組來創建表格.

 * JTable(TableModel dm):創建一個指定數據模式和默認字段模式的JTable 實例。

           通常用數據模型類的對象來保存數據,而表格模型是通過表格列名數組和表格數據數組來創建的.

 3.常用方法:


4.綜合案例:

代碼1:

public class JTableDemo1 extends JFrame {

	//定義表格
	JTable table;
	//定義滾動條面板(用以使表格可以滾動)
	JScrollPane scrollPane;
	//定義數據模型類的對象(用以保存數據),
	DefaultTableModel tableModel;

	public JTableDemo1() {
		super();
		setTitle("表格模型與表格");

		scrollPane = new JScrollPane();
		
		// 定義表格列名數組
		String[] columnNames = { "A", "B","C" };
		// 定義表格數據數組
		String[][] tableValues = { { "A1", "B1","C1" }, { "A2", "B2","C2" },
				{ "A3", "B3","C3" }, { "A4", "B4","C4" } };

		// 創建指定表格列名和表格數據的表格模型類的對象
		tableModel = new DefaultTableModel(tableValues, columnNames);
		// 創建指定表格模型的表格
		table = new JTable(tableModel);

		//設置 RowSorter(RowSorter 用於提供對 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修飾
				"電話號碼", "生日", "工作", "收入", "婚姻狀況", "戀愛狀況" };
		Object[][] rowData = {
				{ "ddd", "男", "江蘇南京", "1378313210", "03/24/1985", "學生", "寄生中",
						"未婚", "沒" },
				{ "eee", "女", "江蘇南京", "13645181705", "xx/xx/1985", "家教", "未知",
						"未婚", "好象沒" },
				{ "fff", "男", "江蘇南京", "13585331486", "12/08/1985", "汽車推銷員",
						"不確定", "未婚", "有" },
				{ "ggg", "女", "江蘇南京", "81513779", "xx/xx/1986", "賓館服務員",
						"確定但未知", "未婚", "有" },
				{ "hhh", "男", "江蘇南京", "13651545936", "xx/xx/1985", "學生", "流放中",
						"未婚", "無數次分手後沒有" } };

		jtable2 = new JTable(rowData, columnNames);

		jtable3 = new JTable(rowData, columnNames);
		jtable3.setPreferredScrollableViewportSize(new Dimension(600, 100));// 設置表格的大小
		jtable3.setRowHeight(30);// 設置每行的高度爲20
		jtable3.setRowHeight(0, 20);// 設置第1行的高度爲15
		jtable3.setRowMargin(5);// 設置相鄰兩行單元格的距離
		jtable3.setRowSelectionAllowed(true);// 設置可否被選擇.默認爲false
		jtable3.setSelectionBackground(Color.white);// 設置所選擇行的背景色
		jtable3.setSelectionForeground(Color.red);// 設置所選擇行的前景色
		jtable3.setGridColor(Color.red);// 設置網格線的顏色
		jtable3.selectAll();// 選擇所有行
		jtable3.setRowSelectionInterval(0, 2);// 設置初始的選擇行,這裏是1到3行都處於選擇狀態
		jtable3.clearSelection();// 取消選擇
		jtable3.setDragEnabled(false);// 不懂這個
		jtable3.setShowGrid(true);// 是否顯示網格線
		jtable3.setShowHorizontalLines(true);// 是否顯示水平的網格線
		jtable3.setShowVerticalLines(true);// 是否顯示垂直的網格線
		jtable3.setValueAt("tt", 0, 0);// 設置某個單元格的值,這個值是一個對象
		jtable3.doLayout();
		jtable3.setBackground(Color.cyan);

		// JTable最好加在JScrollPane上以實現滾動效果
		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):將分層數據集顯示爲輪廓的控件。

 2.常用構造方法:

   JTree():返回帶有示例模型的JTree

   JTree(Object[] value):返回JTree,指定數組的每個元素作爲不被顯示的新根節點的子節點。

   //只有這個構造函數可以創建多個根結點
   JTree(Object[] value):返回 JTree,指定數組的每個元素作爲不被顯示的新根節點的子節點。

   JTree(TreeNode root):返回 JTree,指定的 TreeNode 作爲其根,它顯示根節點。

   JTree(TreeNode root, boolean asksAllowsChildren):返回 JTree,指定的 TreeNode 作爲其根,
   它用指定的方式顯示根節點,並確定節點是否爲葉節點。(true設置爲可添加孩子結點,再添加孩子結點).

 3.代碼演示:

  示例1: 

public class JTreeDemo1 {
	
	JFrame f; 
	Box box;
	JTree jTree1,jTree2;
	
	public JTreeDemo1()
	{
		f = new JFrame(" JTreeDemo1 ");
		box = Box.createHorizontalBox(); //創建Box 類對象
		
		jTree1 = new JTree();
		jTree2 = new JTree();
		
		//向此組件添加任意的鍵/值
		jTree1.putClientProperty("JTree.lineStyle", "Angled"); 
		
		//向Box 容器添加滾動面板
		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 ");
		
		// 構造函數:JTree()
		jTree1 = new JTree();
		
		// 構造函數:JTree(Object[] value)
		Object[] letters = { " a ", " b ", " c ", " d ", " e " };
		jTree2 = new JTree(letters);

		// 構造函數:JTree(TreeNode root)(TreeNode空)
		// 用空結點創建樹
		DefaultMutableTreeNode node1 = new DefaultMutableTreeNode(); // 定義樹結點
		jTree3 = new JTree(node1); // 用此樹結點做參數調用 JTree的構造函數創建含有一個根結點的樹

		// 構造函數:JTree(TreeNode root)(同上,只是TreeNode非空)
		// 用一個根結點創建樹
		DefaultMutableTreeNode node2 = new DefaultMutableTreeNode(" Color ");
		jTree4 = new JTree(node2); // 結點不可以顏色,默認爲白麪黑字
		jTree4.setBackground(Color.lightGray);

		
		// 構造函數:JTree(TreeNode root, boolean
		// asksAllowsChildren)(同上,只是TreeNode又有不同)
		// 使用DefaultMutableTreeNode類先用一個根結點創建樹,設置爲可添加孩子結點,再添加孩子結點
		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);

        
		// 構造函數:JTree(TreeNode root)(同上,只是TreeNode非空)
		// 通過逐個添加結點創建樹
		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();

		
		// 構造函數:JTree(TreeModel newModel)
		// 用DefaultMutableTreeNodel類定義一個結點再用這個結點做參數定義一個用DefaultTreeMode
		// 創建一個樹的模型,再用JTree的構造函數創建一個樹
		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:

      






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章