JTable以及JList资料
java中jtable的用法

java中jtable的用法一、JTable简介JTable是Java Swing包中的一个组件,用于在图形用户界面(GUI)中显示和编辑表格数据。
它可以显示任何类型的数据,包括文本、数字、日期和图像等。
二、创建JTable1. 创建一个空的JTable可以通过以下代码创建一个空的JTable:```JTable table = new JTable();```2. 从二维数组创建JTable可以通过以下代码从二维数组创建一个简单的JTable:String[][] data = {{"John", "Doe"}, {"Jane", "Doe"}};String[] columnNames = {"First Name", "Last Name"};JTable table = new JTable(data, columnNames);```3. 从TableModel创建JTable可以通过实现TableModel接口并使用它来创建一个定制的TableModel,然后将其传递给JTable构造函数来创建一个自定义的JTable。
4. 从数据库中获取数据并创建JTable可以通过使用Java数据库连接(JDBC)API与数据库进行交互,并将结果集转换为TableModel,然后将其传递给JTable构造函数来从数据库中获取数据并创建一个自定义的JTable。
三、设置表格属性1. 设置表头可以使用以下代码设置表头:```String[] columnNames = {"First Name", "Last Name"};table.setColumnIdentifiers(columnNames);```2. 设置表格行高和列宽可以使用以下代码设置表格行高和列宽:```table.setRowHeight(30);table.getColumnModel().getColumn(0).setPreferredWidth(100); ```3. 设置表格背景色和前景色可以使用以下代码设置表格背景色和前景色:```table.setBackground(Color.white);table.setForeground(Color.black);```4. 设置表格字体可以使用以下代码设置表格字体:```Font font = new Font("Arial", Font.PLAIN, 14);table.setFont(font);```5. 设置表格边框可以使用以下代码设置表格边框:```Border border = BorderFactory.createLineBorder(Color.black); table.setBorder(border);```四、渲染器和编辑器1. 渲染器渲染器用于将单元格中的值呈现为用户界面上的文本或图像。
JTable的入门详细介绍

类层次结构图:ng.Objectponent--java.awt.Container--javax.swing.JComponent--javax.swing.JTabel在使用JTable以前,我们先看一下它的构造函数有哪些,以及应该如何使用:JTabel构造函数:JTable():建立一个新的JTables,并使用系统默认的Model.JTable(int numRows,int numColumns):建立一个具有numRows行,numColumns列的空表格,使用的是DefaultTableModel.JTable(Object[][] rowData,Object[][] columnNames):建立一个显示二维数组数据的表格,且可以显示列的名称。
JTable(TableModel dm):建立一个JTable,有默认的字段模式以及选择模式,并设置数据模式。
JTable(TableModel dm,TableColumnModel cm):建立一个JTable,设置数据模式与字段模式,并有默认的选择模式。
JTable(TableModel dm,TableColumnModel cm,ListSelectionModel sm):建立一个JTable,设置数据模式、字段模式、与选择模式。
JTable(Vector rowData,Vector columnNames):建立一个以Vector为输入来源的数据表格,可显示行的名称。
我们先以Array构造方式,说明如何利用JTable来建立一个简单的表格:import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.util.*;public class SimpleTable{public SimpleTable(){JFrame f=new JFrame();Object[][] playerInfo={{"阿呆",new Integer(66),new Integer(32),new Integer(98),new Boolean(false)}, {"阿呆",new Integer(82),new Integer(69),new Integer(128),new Boolean(true)}, };String[] Names={"姓名","语文","数学","总分","及格"};JTable table=new JTable(playerInfo,Names);table.setPreferredScrollableViewportSize(new Dimension(550,30));JScrollPane scrollPane=new JScrollPane(table);f.getContentPane().add(scrollPane,BorderLayout.CENTER);f.setTitle("Simple Table");f.pack();f.show();f.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {System.exit(0);}});}public static void main(String[] args){SimpleTable b=new SimpleTable();}}表格由两部份组成:分别是行标题(Column Header)与行对象(Column Object).利用JTable所提供的getTableHeader()方法取得行标题。
java jlist用法

java jlist用法JList是Java swing提供的列表组件,可以显示一组有序的条目。
它常用于显示列表信息,并允许用户进行选择操作。
下面是JList的一些常见用法:- JList的创建:- 使用默认的构造函数:JList list = new JList();- 使用带有ListModel参数的构造函数:DefaultListModel<String> listModel = new DefaultListModel<>();listModel.addElement("Item 1");listModel.addElement("Item 2");listModel.addElement("Item 3");JList<String> list = new JList<>(listModel);- JList的设置:- 设置JList的数据模型,即ListModel:DefaultListModel<String> listModel = new DefaultListModel<>(); JList<String> list = new JList<>(listModel);- 设置JList的选择模式:- 单选模式:list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);- 多选模式:list.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);- JList的常见操作:- 添加一个项:listModel.addElement("New Item");- 删除选中的项:int selectedIndex = list.getSelectedIndex();if (selectedIndex != -1) {listModel.remove(selectedIndex);}- 获取选中的项:String selectedItem = list.getSelectedValue();- 获取所有选中的项:List<String> selectedItems = list.getSelectedValuesList();你可以根据实际需求,灵活运用JList的各种方法来实现复杂的列表功能。
跟我学Java Swing GUI组件技术及应用实例——JTable表格组件及应用实例

1.1跟我学Java Swing GUI组件技术及应用实例——JTable表格组件及应用实例1.1.1表格控件JTable1、JTable表格控件的主要功能JTable顾名思义就是一个将数据以表格显示的组件,它提供以行和列的方式来显示数据,并且可以拖动列。
如下示图为应用JTable表格控件所创建出的数据表格。
JTable的数据选项不仅仅是可以显示字符串,还可以显示Checkbox选择框、下拉列表框或者图片等内容。
如下为Sun 公司的Swing 教程中的TableDialogEditoDemo 应用程序的执行结果示图,在该示例的数据表格中显示Checkbox选择框、下拉列表框和图片等内容。
2、JTable类的API功能说明(1)JTable类的API功能说明如下示图为JDK API文档中对JTable类的API功能说明的相关信息。
如果需要对数据表格中的表头数据列和数据单元格中的数据列进行定制,则需要通过继承封装表头数据列JTableHeader类或者继承封装数据列的TableColumn类。
如下为JTableHeader类和TableColumn类的功能说明。
(2)表头数据列JTableHeader类的功能说明(3)数据列TableColumn类的功能说明TableColumn 类封装表示JTable中数据列的所有属性,如宽度、大小可调整性、最小和最大宽度。
3、JTable表格控件中的数据可以以多种不同的方式被选中(1)选中某一数据行(2)选中连续的多行数据行(3)选中不连续的多行数据行4、JTable类的构造函数定义可以通过JTable(Object[][] rowData, Object[] columnNames)形式的构造方法创建出数据表格组件,该JTable组件将用来显示一个二维数组rowData 中的值(它是一个行数组),其列名称为columnNames所代表的数组。
JTable类的其它形式的构造函数定义如下:5、JTable 组件中的表示表格数据的数据结构(1)TableModel接口的功能定义由于Java Swing采用了MVC的设计,所以JTable不是用来存放数据的,它只是用来作为视图显示,而真正用来存储和维护数据的是TableModel这个接口的实现类。
java jtable用法

java jtable用法JTable是Java Swing库中的一个组件,用于将数据以表格的形式展示出来。
JTable的用法如下:1.创建JTable对象:可以通过传入一个二维数组或者实现TableModel接口的数据模型来创建JTable对象。
2.设置表头:通过调用getTableHeader()方法获取表头对象,并设置表头的标题和样式。
3.设置表格数据:将数据设置到表格中,可以通过调用setModel()方法来设置TableModel,也可以通过调用setValueAt()方法逐个设置表格中的值。
4.设置表格样式:可以通过调用setDefaultRenderer()方法来设置单元格的渲染器,调用setDefaultEditor()方法来设置单元格的编辑器,以及调用setRowHeight()方法来设置行高等。
5.添加JTable到容器中:将JTable添加到容器中显示出来。
拓展:JTable还有一些其他常用的功能,例如:1.表格排序:可以通过调用setAutoCreateRowSorter()方法来开启表格排序功能,或者通过设置RowSorter来自定义排序规则。
2.表格选择:可以通过调用setSelectionMode()方法来设置表格的选择模式,可以选择单个单元格、单个行、多个行等。
3.表格事件:可以监听表格的事件,例如单元格的点击事件、单元格的编辑事件等,通过添加事件监听器来实现相应的逻辑处理。
4.表格导出:可以将表格中的数据导出为Excel、CSV等格式,通过调用相应的API来实现数据导出功能。
总之,JTable是一个非常强大的表格组件,可以用于展示和处理大量的数据,通过灵活的设置和拓展,可以实现各种复杂的表格功能。
一个详细的JTable使用例子

最近需要使用JTable,第一次使用,很多不懂,到网上找了很多资料和例子,发现很多例子都没有完全的实现操作数据库里一张表的数据,摸了两天终于懂了一点,写了一个例子,把代码直接复制,修改一下数据库的连接就可以运行了.使用JTable操作数据库的一张表,实现增删改,显示表里所有的数据,点击''添加''按钮在表格插入一行填写数据保存到数据库,可一次插入多行,一次可选择任意多行进行删除,一次可以修改多行的值.有写得不好的地方希望大家指出,一起进步.共九个类:一:package product;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import javax.swing.table.AbstractTableModel;public class ProductTableModel extends AbstractTableModel {/*** 神恋科技:*//**changeList用来存放被修改过的数据值,这样做是为了一次修改多行多值, * 保存的对象是ChangedProduct,只记录被修改过的值.*/private static List changeList = new ArrayList();private List list = new ArrayList();private String[] column = { "Product_id", "Product Name","Product Description", "Status" };public ProductTableModel() {}public ProductTableModel(List list) {this();setList(list);}public int getColumnCount() {return column.length;}public int getRowCount() {return list.size();}/*** getValueAt方法就是使得数据在Table显示出来,给每个单元格设值*/public Object getValueAt(int arg0, int arg1) {ProductBean p = (ProductBean) list.get(arg0);return getPropertyValueByCol(p, arg1);}public void addRow(int index, ProductBean p) {if (index < 0 || index > list.size() - 1) {list.add(p);fireTableRowsInserted(list.size(), list.size());} else {list.add(index + 1, p);fireTableRowsInserted(index, index);}}public boolean deleteRow(int index) {if (index >= 0 && index < list.size()) {list.remove(index);fireTableRowsDeleted(index, index);return true;} elsereturn false;}public boolean saveRow(int index, ProductBean p) {if (index >= 0 && index < list.size()) {list.set(index, p);fireTableRowsUpdated(index, index);return true;} elsereturn false;}public ProductBean getRow(int index) {if (index >= 0 && index < list.size()) { return (ProductBean) list.get(index);} elsereturn null;}public List getNewRow(){List list=new ArrayList();List listProduct=getList();Iterator it=listProduct.iterator();while(it.hasNext()){ProductBean p=new ProductBean();p=(ProductBean)it.next();if(p.getProduct_id()==0){list.add(p);}}return list;}public List getList() {return list;}public void setList(List list) {this.list = list;fireTableDataChanged();}public String getColumnName(int i) {return column[i];}public void setColumn(String[] column) {this.column = column;}public Object getPropertyValueByCol(ProductBean p, int col) {switch (col) {case 0:return p.getProduct_id();case 1:return p.getProduct_name();case 2:return p.getProduct_desc();case 3:return p.getProduct_status();}return null;}public void setPropertyValueByCol(ProductBean p, String value, int col) {switch (col) {case 1:p.setProduct_name(value);break;case 2:p.setProduct_desc(value);break;case 3:p.setProduct_status(value);break;}fireTableDataChanged();}public boolean isCellEditable(int row, int column) {return true;}/*** setValueAt方法是使增加或修改值的时候生效,aValue就是你在单元格填的值,* 要把这些值保存到数据源中*/public void setValueAt(Object aValue, int rowIndex, int columnIndex) {ProductBean p = (ProductBean) list.get(rowIndex);setPropertyValueByCol(p, aValue.toString(), columnIndex);this.fireTableCellUpdated(rowIndex, columnIndex);}public static List getChangeList() {return changeList;}public static void setChangeList(List changeList) {ProductTableModel.changeList = changeList;}}二:package product;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Container;import java.awt.Dimension;import java.awt.FlowLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTable;import javax.swing.table.DefaultTableColumnModel;public class ProductFrame extends JFrame {/*** 神恋科技:*/private JPanel panelTop = null;private JLabel labHeader = null;private JPanel panelBottom = null;private JButton add = null;private JButton delete = null;private JButton save = null;private JScrollPane scroll = null;private JTable table = null;private ProductTableModel model = null;private List listProduct = null;public ProductTableModel getModel() {if (null == model) {model = new ProductTableModel(listProduct);//给model添加一个监听,当修改的时候将触发该事件,代表事件的类是ChangeEventmodel.addTableModelListener(new ChangeEvent(model));return model;}return model;}public JLabel getLabHeader() {if (null == labHeader) {labHeader = new JLabel("Maintaince Product Information"); return labHeader;}return labHeader;}public JTable getTable() {if (null == table) {table = new JTable(getModel());table.setEnabled(true);table.setRowSelectionAllowed(true);table.setBackground(Color.YELLOW);/*** 隐藏第一列ID,不显示出来*/DefaultTableColumnModel dcm = (DefaultTableColumnModel)table.getColumnModel();dcm.getColumn(0).setMinWidth(0);dcm.getColumn(0).setMaxWidth(0);return table;}return table;}public JScrollPane getPanTable() {if (null == scroll) {scroll = new JScrollPane();scroll.setViewportView(getTable());return scroll;}return scroll;}if (null == panelTop) {panelTop = new JPanel();panelTop.setLayout(new FlowLayout(FlowLayout.CENTER));panelTop.add(getLabHeader());return panelTop;}return panelTop;}public JPanel getPanelBottom() {if (null == panelBottom) {panelBottom = new JPanel();panelBottom.setLayout(new FlowLayout(FlowLayout.CENTER)); panelBottom.add(getAdd());panelBottom.add(getDelete());panelBottom.add(getSave());return panelBottom;}return panelBottom;}public JButton getAdd() {/*** 点该按钮的时候调用addProduct()方法,在数据源(listProduct)将 * 增加一个元素,没设值前都是null.*/if (null == add) {add = new JButton("New");add.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {addProduct();}});return add;}return add;}if (null == delete) {delete = new JButton("Delete");delete.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {/*** 支持一次选中多行后删除*/int[] rows=getTable().getSelectedRows();if(rows.length>0){int flag=JOptionPane.showConfirmDialog(null, "确定删除?"); if(flag==JOptionPane.YES_OPTION)deleteProduct();}elseJOptionPane.showMessageDialog(null,"请选择要删除的行!"); }});return delete;}return delete;}public JButton getSave() {if (null == save) {save = new JButton("save");save.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {saveProduct();JOptionPane.showMessageDialog(null,"更新成功!");}});return save;}return save;}public void addProduct() {ProductBean p = new ProductBean();getModel().addRow(getTable().getSelectedRow(), p);}public void saveProduct() {DaoInterface dao=DaoFactory.getDao();List changeList=getModel().getChangeList();//如果有修改过就调用update方法if(changeList.size()>0){dao.update(changeList);changeList.clear();}List newRow=getModel().getNewRow();//如果是新增就调用saveList,支持一次增加多行if(newRow.size()>0){dao.saveList(newRow);getModel().setList(dao.getList());getTable().updateUI();newRow.clear();}}public void deleteProduct() {/**支持一次删除多行,先获得所有选中的行,然后按照行数取得Product实例,* 放进一个list,然后传给操作数据库的deleteList方法.*/int[] rows=getTable().getSelectedRows();ArrayList list=new ArrayList();DaoInterface dao=DaoFactory.getDao();for(int i=rows.length-1;i>=0;i--){list.add(getModel().getRow(rows[i]));getModel().deleteRow(rows[i]);}dao.deleteList(list);getTable().updateUI();list.clear();}public void initData() {/*** 初始化数据源,从数据库里把数据拿出来,然后它会调用* getValueAt方法来一个单元格一个单元格来设值,让它显示出来. */listProduct = new ArrayList();DaoInterface dao=DaoFactory.getDao();listProduct=dao.getList();this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}public ProductFrame() {initData();Container c = this.getContentPane();c.setLayout(new BorderLayout());c.add(getPanelTop(), BorderLayout.NORTH);c.add(getPanelBottom(), BorderLayout.SOUTH);c.add(getPanTable(), BorderLayout.CENTER);this.setSize(new Dimension(600, 400));this.setVisible(true);}public static void main(String[] args) {ProductFrame frame = new ProductFrame();frame.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {System.exit(0);}});}}三:package product;public class ProductBean {/*** 神恋科技:*/private int product_id;private String product_name;private String product_desc;private String product_status;public String getProduct_name() {return product_name;}public void setProduct_name(String product_name) {this.product_name = product_name;}public String getProduct_desc() {return product_desc;}public void setProduct_desc(String product_desc) {this.product_desc = product_desc;}public String getProduct_status() {return product_status;}public void setProduct_status(String product_status) { this.product_status = product_status;}public int getProduct_id() {return product_id;}public void setProduct_id(int product_id) {this.product_id = product_id;}}四:package product;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;public class JDBConnection {/*** 神恋科技:*/private static Connection conn;public static Connection getConn() {String driverName = "oracle.jdbc.driver.OracleDriver"; String url = "jdbc:oracle:thin:@192.168.0.66:1521:test"; String userName = "JACKTRAINING";String pwd = "JACKTRAINING";try {Class.forName(driverName);conn = DriverManager.getConnection(url, userName, pwd); } catch (ClassNotFoundException e) {System.out.println("装载驱动出错!");} catch (SQLException e) {System.out.println("获取数据库连接出错!");e.printStackTrace();}return conn;}}五:package product;import java.util.ArrayList;import java.util.List;public interface DaoInterface {/*** 神恋科技:*/public List getList();public void saveList(List list);public void deleteList(List list);public void update(List list);}六:package product;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import javax.swing.JOptionPane;public class DaoImpl implements DaoInterface {/*** 神恋科技:*/public List getList() {Connection conn = JDBConnection.getConn();String s1 = "select * from justin_jtable_product order by product_id asc";PreparedStatement ps = null;ResultSet rs = null;List list = new ArrayList();try {ps = conn.prepareStatement(s1);rs = ps.executeQuery();} catch (SQLException e) {System.out.println("取出全部数据出错!");JOptionPane.showMessageDialog(null, "取出全部数据出错!");e.printStackTrace();}try {while (rs.next()) {ProductBean p = new ProductBean();p.setProduct_id(rs.getInt(1));p.setProduct_name(rs.getString(2));p.setProduct_desc(rs.getString(3));p.setProduct_status(rs.getString(4));list.add(p);}} catch (SQLException e) {JOptionPane.showMessageDialog(null, "取出全部数据出错!");e.printStackTrace();} finally {try {rs.close();ps.close();conn.close();} catch (SQLException e) {JOptionPane.showMessageDialog(null, "关闭数据连接时出错!");e.printStackTrace();}}return list;}public void saveList(List list) {String s1 = "";Connection conn = JDBConnection.getConn();PreparedStatement ps = null;try {Iterator it = list.iterator();while (it.hasNext()) {ProductBean p = (ProductBean) it.next();String name = p.getProduct_name();String desc = p.getProduct_name();String status = p.getProduct_status();int id = p.getProduct_id();s1 = "insert into justin_jtable_product(product_name,"+ "product_desc,product_status) values(?,?,?)";ps = conn.prepareStatement(s1);ps.setString(1, name);ps.setString(2, desc);ps.setString(3, status);ps.executeUpdate();}} catch (SQLException e) {System.out.println("添加数据时出错!");JOptionPane.showMessageDialog(null, "添加数据时出错!");e.printStackTrace();} finally {try {ps.close();conn.close();} catch (SQLException e) {JOptionPane.showMessageDialog(null, "关闭数据连接时出错!");e.printStackTrace();}}}public void deleteList(List list) {String str = "delete from justin_jtable_product whereproduct_id=?";int id = 0;Iterator it = list.iterator();Connection conn = JDBConnection.getConn();PreparedStatement ps = null;try {while (it.hasNext()) {id = ((ProductBean) it.next()).getProduct_id();ps = conn.prepareStatement(str);ps.setInt(1, id);ps.executeUpdate();}} catch (SQLException e) {} finally {try {ps.close();conn.close();} catch (SQLException e) {JOptionPane.showMessageDialog(null, "关闭数据连接时出错!");e.printStackTrace();}}}public void update(List list) {Connection conn = JDBConnection.getConn();PreparedStatement ps = null;Iterator it = list.iterator();int id = 0;int col = 0;String value = "";String str = "";try {while (it.hasNext()) {ChangedProduct ch = (ChangedProduct) it.next();id = ch.getId();col = ch.getCol();value = ch.getValue();switch (col) {case 1:str = "update justin_jtable_product set product_name=? where product_id=?";break;case 2:str = "update justin_jtable_product set product_desc=? where product_id=?";break;case 3:str = "update justin_jtable_product set product_status=? where product_id=?";}ps = conn.prepareStatement(str);ps.setString(1, value);ps.setInt(2, id);ps.executeUpdate();}} catch (SQLException e) {JOptionPane.showMessageDialog(null, "修改数据时出错!");e.printStackTrace();} finally {try {ps.close();conn.close();} catch (SQLException e) {JOptionPane.showMessageDialog(null, "关闭数据连接时出错!");e.printStackTrace();}}}}七:package product;public class DaoFactory {/*** 神恋科技:*/synchronized public static DaoInterface getDao(){DaoInterface dao=null;if(dao==null){dao=new DaoImpl();return dao;return dao;}}八:package product;public class ChangedProduct {/*** 神恋科技: */private int id;private int col;private String value;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getValue() {return value;}public void setValue(String value) { this.value = value;}public int getCol() {return col;}public void setCol(int col) {this.col = col;}九:package product;import java.util.ArrayList;import java.util.List;import javax.swing.event.TableModelEvent;import javax.swing.event.TableModelListener;public class ChangeEvent implements TableModelListener {/*** 神恋科技:*//*** 监听table被改动的事件,只要目的是用来记录被修改过的值,* 这样做可以一次任意行的修改值,修改一个单元格的值就记录一次, * 主要记录id,新值,烈数.*/ProductTableModel model = null;public ChangeEvent(ProductTableModel model) {this.model = model;}List list = model.getChangeList();int id = 0;String value = "";public void tableChanged(TableModelEvent arg0) {int row = arg0.getFirstRow();int col = arg0.getColumn();if (col != -1) {ChangedProduct cp = new ChangedProduct();id = ((Integer) model.getValueAt(row, 0)).intValue();if (id != 0) {value = model.getValueAt(row, col).toString();cp.setId(id);cp.setCol(col);cp.setValue(value); list.add(cp);}}}}。
java jtable用法

java jtable用法Java JTable用法一、概述JTable是Java Swing库中的一个控件,用于在图形用户界面中显示和编辑表格数据。
它提供了丰富的功能和灵活的配置选项,使开发人员能够轻松地创建和管理数据表格。
二、创建JTable对象1.构造函数:可以使用JTable的构造函数来创建一个空的表格:JTable table = new JTable();2.数据模型:可以通过设置数据模型来创建一个包含指定数据的表格:String[][] data = {{"John", "Doe"}, {"Jane", "Smith "}, {"Bob", "Johnson"}};String[] columnNames = {"First Name", "Last Name"}; JTable table = new JTable(data, columnNames);三、设置表格属性1.表头:可以使用setTableHeader()方法来设置表格的表头:JTableHeader header = ();();(new Font("Arial", , 16));(header);2.行高:可以使用setRowHeight()方法来设置表格的行高度:(30);3.列宽:可以使用setColumnWidth(int column, int width)方法来设置指定列的宽度:().getColumn(0).setPreferredWidth(100);四、添加行和列1.添加行:可以使用数据模型的addRow(Object[] rowData)方法来添加一行数据:DefaultTableModel model = (DefaultTableModel) (); (new Object[]{"Tom", "Brown"});2.添加列:可以使用数据模型的addColumn(Object columnName)方法来添加一列数据:("Age");五、单元格编辑1.编辑模式:可以使用setCellEditor()方法来设置一个单元格编辑器:DefaultCellEditor editor = new DefaultCellEditor(ne w JTextField());().getColumn(1).setCellEditor(editor);2.单元格监听:可以使用addCellEditorListener()方法来添加一个单元格编辑器监听器:(new CellEditorListener() {@Overridepublic void editingStopped(ChangeEvent e) {// 编辑完成后的处理}@Overridepublic void editingCanceled(ChangeEvent e) {// 编辑取消后的处理}});六、样式和渲染1.颜色:可以使用自定义的继承自DefaultTableCellRenderer的渲染器来设置单元格的前景色和背景色:class MyRenderer extends DefaultTableCellRenderer { public Component getTableCellRendererComponent(JTabl e table, Object value, boolean isSelected, boolean hasFo cus, int row, int column) {Component component = (table, value, isSelected,hasFocus, row, column);if (row % 2 == 0) {();} else {();}return component;}}// 设置渲染器().getColumn(1).setCellRenderer(new MyRenderer());2.字体:可以使用自定义的渲染器来设置单元格的字体:().getColumn(0).setCellRenderer(new DefaultTableCel lRenderer() {public Component getTableCellRendererComponent(JTabl e table, Object value, boolean isSelected, boolean hasFo cus, int row, int column) {Component component = (table, value, isSelected, hasFocus, row, column);(new Font("Arial", , 14));return component;}});以上是Java JTable的一些常用用法和详细讲解。
JTable

Jtable 用来显示和编辑常规二维单元表。
Jtable有很多用来自定义其呈现和编辑的工具,同时提供了这些功能的默认值,从而可以设置简单表,例如要设置一个10行10列的表:TableModel dataModel = new AbstractTableModel() {public int getColumnCount() { return 10;}Public int getRowCount() {return 10;}public Object getValueAt(int row, int col) {return new Integer(row*col);} };Jtable table = new Jtable(dataModel);JscrollPane scrollpane = new JscrollPane(table);如果要在单独的试图中(在JscrollPane外)使用Jtable并显示其标题,可使用getTableHeader ()获取并单独显示它。
要启用行的排序和过滤,使用RowSorter。
可以通过以下两种方法之一设置一个行排序器。
1、直接设置RowSorter,例如:table.setRowSorter(new TableRowSorter(model));2、将autoCreateRowSorter属性设置为true,从而Jtable可用于创建RowSorter。
设计使用Jtable的应用程序时,需注意用来表示数据的数据结构。
DefaultTableModel是一个模型实现,它使用一个Vector来存储所有单元格的值,该Vector由包含多个Object的Vector 组成。
除了将数据从应用程序复制到DefaultTableModel中之外,还可以用TableModel接口的方式来包装数据,这样可将数据直接传递到Jtable。
在创建子类时使用AbstractTableModel 作为基类,在不需要创建子类时则使用DefaultTableModel。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、JTable的使用:建议使用如下方式创建JTable对象JTable(Vector rowData,Vector columnNames):建立一个以Vector为输入来源的数据表格,可显示行的名称。
详见精通Swing设计帮助文档2、JList的使用:类层次结构图:ng.Objectponent--java.awt.Container--javax.swing.JComponent--javax.swing.JListJList与JCheckBox有点相似,都可以让你选择一到多个选项,较不同的是,JList的选项方式是整列选取。
我们先来看看JList所提供的构造函数,方便迅速建立JList对象,如下所示:JList构造函数:JList():建立一个新的JList组件。
JList(ListModel dataModel):利用ListModel建立一个新的JList组件.JList(Object[] listData):利用Array对象建立一个新的JList组件。
JList(Vector listData):利用Vector对象建立一个新的JList组件。
7-3-1:建立一般的JList:一般我们若不需要在JList中加入Icon图像,通常会用第3或第4个构造函数建立JList对象。
而这两个最大的不同在于使用Array对象建立JList组件就无法改变项目的数量。
对于项目数量经常改变的环境来说,以Vector对象来建立JList组件当然比较适合。
例如一个卖手机的店家,可能动不动就会有新手机上市,此时若用Array对象就不是很适当了!我们来看个范例看怎么构造一个简单的JList吧!import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.util.Vector;public class JList1{public static void main(String args[]){JFrame f = new JFrame("JList");Container contentPane = f.getContentPane();contentPane.setLayout(new GridLayout(1,2));String[] s = {"美国","日本","大陆","英国","法国"};Vector v = new Vector();v.addElement("Nokia 8850");v.addElement("Nokia 8250");v.addElement("Motorola V8088");v.addElement("Motorola V3688x");v.addElement("Panasonic GD92");v.addElement("其他");JList list1 = new JList(s);list1.setBorder(BorderFactory.createTitledBorder("您最喜欢到哪个国家玩呢?"));JList list2 = new JList(v);list2.setBorder(BorderFactory.createTitledBorder("您最喜欢哪一种手机?"));contentPane.add(new JScrollPane(list1));contentPane.add(new JScrollPane(list2));f.pack();f.show();f.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {System.exit(0);}});}}在这个范例中,当窗口变小时,JList并不会有滚动(ScrollBar)的效果,所以可能无法看到比较下面的选项。
若我们要有滚动的效果,必须将JList放入滚动面版中(JScrollPane),如我们在程序改为: contentPane.add(new JScrollPane(list1));contentPane.add(new JScrollPane(list2));如此就有滚动的效果了,若我们要有多个选项呢?在JList中有3种选择模式(Selection Mode)可供我们使用,分别是单一选择、连续区间选择、与多重选择。
我们可以在ListSelectionModel这个interface 中找到这3个常数值,如下:static int SINGLE_SELECTION:一次只能选择一个项目。
static int SINGLE_INTERVAL_SELECTION:按住[shift]键,可以对某一边续的项目作选取。
static int MULTIPLE_INTERVAL_SELECTION:没有任何限制。
可作单一选择,连续区间选择,或对不连续的项目作多重选择(按住[Ctrl]键)。
多得选择是java对JList的默认值,因此在上例中你可以在JList 中作这3种模式的选择方式。
设置选择模式可以利用JList所提供的setSelectionMode(int selectionMode)方法。
例如,若我们将上例改成如下:import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.util.Vector;public class JList2{public static void main(String args[]){JFrame f = new JFrame("JList");Container contentPane = f.getContentPane();contentPane.setLayout(new GridLayout(1,3));String[] s1 = {"美国","日本","大陆","英国","法国","意大利","澳洲","韩国"};String[] s2 = {"范志毅","符兵","周宁","杨晨","高锋","南方","其他"};Vector v = new Vector();v.addElement("Nokia 3310");v.addElement("Nokia 8850");v.addElement("Nokia 8250");v.addElement("Motorola V8088");v.addElement("Motorola V3688x");v.addElement("Panasonic GD92");v.addElement("Panasonic GD93");v.addElement("NEC DB2100");v.addElement("Alcatel OT500");v.addElement("Philips Xenium 9@9 ");v.addElement("Ericsson T29sc");v.addElement("其他");JList list1 = new JList(s1);list1.setBorder(BorderFactory.createTitledBorder("您最喜欢到哪个国家玩呢?"));JList list2 = new JList(s2);list2.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);list2.setBorder(BorderFactory.createTitledBorder("您最喜欢哪个运动员呢?"));JList list3 = new JList(v);list3.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTIO N);list3.setBorder(BorderFactory.createTitledBorder("您最喜欢哪一种手机?"));contentPane.add(new JScrollPane(list1));contentPane.add(new JScrollPane(list2));contentPane.add(new JScrollPane(list3));f.pack();f.show();f.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {System.exit(0);}});}}。