Swing中表格(JTable)的详细使用

您所在的位置:网站首页 java的jtable的用法 Swing中表格(JTable)的详细使用

Swing中表格(JTable)的详细使用

2023-08-19 03:40| 来源: 网络整理| 查看: 265

我们在使用表格的时候一般都是希望用它来进行数据的展示的,但是表格不仅仅可以用来进行显示数据,还可以在表格中对数据进行操作,或者在表格中添加一些其他的控件来进行一些操作

基本使用:

  public static void main(String[] args) { /* * 表格的数据是存储在DefaultTableModel里面的 */ Object[] columns={"字段一","字段二","字段三","字段四"};//字段 Object[][] data=null;//需要展示的数据,一般是二维数组 DefaultTableModel model=new DefaultTableModel(data, columns); JTable table=new JTable(model); }

进阶使用:(对表格进行渲染,进行编辑,表格中添加控件)

表格中的显示和编辑是由DefaultTableCellRenderer和TableCellEditor这两个类分别来控制,根据需要可以重写这两个类,下面这个例子实现了基本表格中常用的需求。

1:重写DefaultTableCellRenderer类

package JTableDemo; import java.awt.Color; import java.awt.Component; import javax.swing.JCheckBox; import javax.swing.JLabel; import javax.swing.JTable; import javax.swing.table.DefaultTableCellRenderer; public class MyTableReander extends DefaultTableCellRenderer{ private static final long serialVersionUID = 1L; /*对表格进行渲染的时候单元格默认返回的是JLabel,可以根据需要返回不同的控件*/ @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean arg3, int row, int column) { // TODO Auto-generated method stub if (column==0) { JCheckBox box=new JCheckBox(); box.setOpaque(true); setHorizontalAlignment(box.CENTER); box.setHorizontalAlignment(JCheckBox.CENTER); if (isSelected) {//点击表格的时候改变点击的行的背景色 box.setBackground(new Color(135, 206, 250)); } else { if (row % 2 == 0) { box.setBackground(new Color(240, 250, 250)); box.setForeground(table.getForeground()); } else { box.setBackground(table.getBackground()); } } boolean valu=(Boolean) value; box.setSelected(valu); return box; } JLabel label = new JLabel(); label.setOpaque(true); if (isSelected) {//点击表格的时候改变点击的行的背景色 label.setBackground(new Color(135, 206, 250)); } else { if (row % 2 == 0) { label.setBackground(new Color(240, 250, 250)); label.setForeground(table.getForeground()); } else { label.setBackground(table.getBackground()); } } label.setText(value != null ? value.toString() : ""); return label; } }

2:重写TableCellEditor类(工具类,可以添加JTextField,JCheckBox,JComboBox等控件到单元格中)

package JTableDemo; import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.awt.event.MouseEvent; import java.io.Serializable; import java.util.EventObject; import javax.swing.AbstractCellEditor; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JComponent; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.JTree; import javax.swing.table.TableCellEditor; public class MyTableCellEditor extends AbstractCellEditor implements TableCellEditor{ protected JComponent editorComponent; protected EditorDelegate delegate; protected int clickCountToStart = 1; public MyTableCellEditor(final JTextField textField) { editorComponent = textField; this.clickCountToStart = 2; delegate = new EditorDelegate() { public void setValue(Object value) { textField.setText((value != null) ? value.toString().trim() : ""); } public Object getCellEditorValue() { return textField.getText(); } }; textField.addActionListener(delegate); } public MyTableCellEditor(final JCheckBox checkBox) { editorComponent = checkBox; checkBox.setSelected(false); checkBox.setHorizontalAlignment(JCheckBox.CENTER); delegate = new EditorDelegate() { public void setValue(Object value) { boolean selected = false; if (value instanceof Boolean) { selected = ((Boolean)value).booleanValue(); } else if (value instanceof String) { selected = value.equals("true"); } checkBox.setSelected(selected); } public Object getCellEditorValue() { return Boolean.valueOf(checkBox.isSelected()); } }; checkBox.addActionListener(delegate); checkBox.setRequestFocusEnabled(false); } public MyTableCellEditor(final JComboBox comboBox) { editorComponent = comboBox; comboBox.putClientProperty("JComboBox.isTableCellEditor", Boolean.TRUE); delegate = new EditorDelegate() { public void setValue(Object value) { comboBox.setSelectedItem(value); } public Object getCellEditorValue() { return comboBox.getSelectedItem(); } public boolean shouldSelectCell(EventObject anEvent) { if (anEvent instanceof MouseEvent) { MouseEvent e = (MouseEvent)anEvent; return e.getID() != MouseEvent.MOUSE_DRAGGED; } return true; } public boolean stopCellEditing() { if (comboBox.isEditable()) { // Commit edited value. comboBox.actionPerformed(new ActionEvent( MyTableCellEditor.this, 0, "")); } return super.stopCellEditing(); } }; comboBox.addActionListener(delegate); } public Component getComponent() { return editorComponent; } public void setClickCountToStart(int count) { clickCountToStart = count; } public int getClickCountToStart() { return clickCountToStart; } public Object getCellEditorValue() { return delegate.getCellEditorValue(); } public boolean isCellEditable(EventObject anEvent) { if(anEvent != null && delegate != null){ return delegate.isCellEditable(anEvent); }else{ return false; } } public boolean shouldSelectCell(EventObject anEvent) { return delegate.shouldSelectCell(anEvent); } public boolean stopCellEditing() { return delegate.stopCellEditing(); } public void cancelCellEditing() { delegate.cancelCellEditing(); } public Component getTreeCellEditorComponent(JTree tree, Object value, boolean isSelected, boolean expanded, boolean leaf, int row) { String stringValue = tree.convertValueToText(value, isSelected, expanded, leaf, row, false); delegate.setValue(stringValue); return editorComponent; } public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { delegate.setValue(value); return editorComponent; } protected class EditorDelegate implements ActionListener, ItemListener, Serializable { /** The value of this cell. */ protected Object value; public Object getCellEditorValue() { return value; } public void setValue(Object value) { this.value = value; } public boolean isCellEditable(EventObject anEvent) { if (anEvent instanceof MouseEvent) { return ((MouseEvent)anEvent).getClickCount() >= clickCountToStart; } return true; } public boolean shouldSelectCell(EventObject anEvent) { return true; } public boolean startCellEditing(EventObject anEvent) { return true; } public boolean stopCellEditing() { fireEditingStopped(); return true; } public void cancelCellEditing() { fireEditingCanceled(); } public void actionPerformed(ActionEvent e) { MyTableCellEditor.this.stopCellEditing(); } public void itemStateChanged(ItemEvent e) { MyTableCellEditor.this.stopCellEditing(); } } }

3:重写DefaultTableModel类

package JTableDemo; import javax.swing.table.DefaultTableModel; public class MyTableModel extends DefaultTableModel{ private static final long serialVersionUID = 1L; private static final String[] columns={"字段一","字段二","字段三","字段四"};//所有的列字段 public MyTableModel(Object[][] data){ super(data, columns); } @Override public boolean isCellEditable(int row, int column) { // TODO Auto-generated method stub //重写isCellEditable方法,设置是否可以对表格进行编辑,也可以设置某行或者列,可以编辑或者不可以编辑 return super.isCellEditable(row, column); } @Override public void setValueAt(Object arg0, int arg1, int arg2) { // TODO Auto-generated method stub super.setValueAt(arg0, arg1, arg2); } }

最后效果:

 

源码下载链接:https://download.csdn.net/download/qq_36880602/10472256

 

 

 

   

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3