一:表格(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:
我正在尝试制作一个JTable,它在一个单元格中有一个JComboBox。我知道我可以使用celleditor,但诀窍是我希望在每一行的组合框中有不同的信息。表中的每一行都代表一个对象,在该对象上有一个arraylist和它的内容,我想在组合框中。到目前为止,这是我的思考过程。 现在,当我稍后调用该方法时(通过按一个按钮),我想插入一个新的行,其中包含Coloum5中唯一的组合框,但我不知道如何做
我很好奇,在放置组件时,如何使用miglaway在网格上均匀分布组件: 例如,如果我在一个按钮组中放置四个JRadioButton以跨越3行2列(2,3),然后放置三个JButton,则分布的权重是不相等的,我最终会得到以下结果: 如图所示,A和B的大小相同,C保留剩余的空间:我希望A、B、C在垂直方向上等于三分之一。 如果这在GridBagLayout中是可能的,我也可以利用它,但是我在任何一种
当我点击JButton时,什么都不会发生。这甚至适用于我放入的JScrollPane(它显示,但不会滚动)。为什么JPanel不在前面?我觉得有些东西必须被覆盖。应该是不是箭头部分的展开?如果是,如何做到这一点? 这是为疯狂程序员说,渲染器和编辑器使你放下的图像。在本例中,JButton是可单击的。
本文向大家介绍Java表格JTable代码实例解析,包括了Java表格JTable代码实例解析的使用技巧和注意事项,需要的朋友参考一下 代码如下: 代码运行效果截图: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
我目前正在开发一个JComboBox组件,我希望在其中的组合框中有一个JTable用于下拉选择。我扩展了ListCellRenderer,并且在弹出窗口中有一个表。 我想用两种不同的方式来呈现。第一个作为所选行的绑定列的标签,当弹出窗口不可见时。第二种是在弹出窗口可见时用JScrollPane显示表。 不幸的是,当我这样做时,弹出窗口被缩小到列表的行高,这只为表的列留下了空间。 如果我只是使用滚动
使用基于数组的二叉树实现,而不是旧的基于节点的实现,在速度/空间/总体性能方面有什么好处吗?我知道对基于数组的树进行旋转或任何其他复杂的修改都是可怕的,但是在简单的二叉树实现的情况下,你会说通过数组实现会更好吗?