Java 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:
下一篇: Java中for循环的执行过程分析