HowTo JTable or JXTable
来源:互联网 发布:伊利网络测评怎么算过 编辑:程序博客网 时间:2024/05/01 08:34
1. First, Introduce a wonderful web site: https://javadesktop.dev.java.net/
many extentions of java are living here. with them, your work would be hacked.
2. Then a demo for copying or paste data between JTable and Excel.
package com.vsa.bin;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.datatransfer.*;
import java.util.*;
public class CopyPasteExcelAdapter implements ActionListener
{
private String rowString, value;
private Clipboard clipboard;
private StringSelection stringSelection;
private JTable table;
public CopyPasteExcelAdapter(JTable table)
{
this.table = table;
KeyStroke keyStroke_copy = KeyStroke.getKeyStroke(KeyEvent.VK_C,
ActionEvent.CTRL_MASK, false);
KeyStroke keyStroke_paste = KeyStroke.getKeyStroke(KeyEvent.VK_V,
ActionEvent.CTRL_MASK, false);
table.registerKeyboardAction(this, "Copy", keyStroke_copy,
JComponent.WHEN_FOCUSED);
table.registerKeyboardAction(this, "Paste", keyStroke_paste,
JComponent.WHEN_FOCUSED);
clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
}
public void actionPerformed(ActionEvent e)
{
if (e.getActionCommand().compareTo("Copy") == 0)
{
StringBuffer sbf = new StringBuffer();
int numcols = table.getSelectedColumnCount();
int numrows = table.getSelectedRowCount();
int[] rowSelected = table.getSelectedRows();
int[] colSelected = table.getSelectedColumns();
if (!((numrows - 1 == rowSelected[rowSelected.length - 1]
- rowSelected[0] && numrows == rowSelected.length)
&& (numcols - 1 == colSelected[colSelected.length - 1]
- colSelected[0] && numcols == colSelected.length)))
{
JOptionPane.showMessageDialog(null, "Invalid Copy Selection",
"Invalid Copy Selection", JOptionPane.ERROR_MESSAGE);
return;
}
for (int i = 0; i < numrows; i++)
{
for (int j = 0; j < numcols; j++)
{
sbf
.append(table.getValueAt(rowSelected[i],
colSelected[j]));
if (j < numcols - 1) sbf.append("/t");
}
sbf.append("/n");
}
stringSelection = new StringSelection(sbf.toString());
clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
clipboard.setContents(stringSelection, stringSelection);
}
if (e.getActionCommand().compareTo("Paste") == 0)
{
System.out.println("Trying to Paste");
int startRow = (table.getSelectedRows())[0];
int startCol = (table.getSelectedColumns())[0];
try
{
String trstring = (String) (clipboard.getContents(this)
.getTransferData(DataFlavor.stringFlavor));
StringTokenizer rowToken = new StringTokenizer(trstring, "/n");
for (int i = 0; rowToken.hasMoreTokens(); i++)
{
rowString = rowToken.nextToken();
StringTokenizer cellToken = new StringTokenizer(rowString,
"/t");
for (int j = 0; cellToken.hasMoreTokens(); j++)
{
value = (String) cellToken.nextToken();
if (startRow + i < table.getRowCount()
&& startCol + j < table.getColumnCount()) table
.setValueAt(value, startRow + i, startCol + j);
}
}
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
}
}
3. Demo for JXTable.
package com.vsa.bin;
import java.awt.BorderLayout;
public class PropertyPanel extends JPanel
{
private static final long serialVersionUID = 7598712670750954217L;
private JXTable table = null;
private JXFindBar findBar = null;
private JScrollPane scrollPane = null;
private DefaultTableModel defaultTableModel = null;
private DefaultTableColumnModel defaultTableColumnModel = null;
private TableColumn tableColumn_property = new TableColumn(0, 100, null, null);
private TableColumn tableColumn_value = new TableColumn(1);
private PropertyTableCellEditor propertyTableCellEditor = new PropertyTableCellEditor();
private String[] colNames = new String[] { "Property", "Value" };
public PropertyPanel()
{
setLayout(new BorderLayout(0, 0));
findBar = new JXFindBar();
add(findBar, BorderLayout.NORTH);
scrollPane = new JScrollPane();
add(scrollPane, BorderLayout.CENTER);
table = new JXTable();
defaultTableModel = new DefaultTableModel()
{
private static final long serialVersionUID = -4081488768631957930L;
public boolean isCellEditable(int row, int col)
{
if (col == 0) return false;
else return true;
}
};
// using shared column name.
defaultTableModel.addColumn(this.colNames[0]);
defaultTableModel.addColumn(this.colNames[1]);
table.setModel(defaultTableModel);
defaultTableColumnModel = new DefaultTableColumnModel();
// do not use the different object as the header.
tableColumn_property.setHeaderValue(this.colNames[0]);
tableColumn_property.setPreferredWidth(60);
tableColumn_property.setMinWidth(60);
tableColumn_value.setHeaderValue(this.colNames[1]);
tableColumn_value.setPreferredWidth(150);
tableColumn_value.setMinWidth(60);
tableColumn_value.setCellEditor(propertyTableCellEditor);
defaultTableColumnModel.addColumn(tableColumn_property);
defaultTableColumnModel.addColumn(tableColumn_value);
table.setColumnModel(defaultTableColumnModel);
propertyTableCellEditor.setTable(table);
table.setColumnControlVisible(true);
table.setGridColor(Color.LIGHT_GRAY);
table.setShowGrid(true);
table.setCellSelectionEnabled(true);
table.setRowSelectionAllowed(true);
table.setColumnSelectionAllowed(false);
table.getTableHeader().setReorderingAllowed(false);
table.setSortable(false);
// make it is possible to copy from or paste data in table into excel.
new CopyPasteExcelAdapter(table);
showPropertyTable(null);
}
public void showPropertyTable(ArrayList<Property> properties)
{
if (properties == null) return;
// clear all the rows in table.
this.defaultTableModel.setRowCount(0);
// clear all the cell editor.
this.propertyTableCellEditor.clear();
int row = 0;
for (Property property : properties)
{
Object[] rowData = new Object[2];
rowData[0] = property.getName();
rowData[1] = property.getValue();
this.defaultTableModel.addRow(rowData);
JComponent editor = property.getEditor();
property.getName();
if (editor instanceof JTextField)
{
propertyTableCellEditor.addTableCellEditor((JTextField) editor, row++);
}
else if (editor instanceof JCheckBox)
{
propertyTableCellEditor.addTableCellEditor((JCheckBox) editor, row++);
}
else if (editor instanceof JComboBox)
{
propertyTableCellEditor.addTableCellEditor((JComboBox) editor, row++);
}
}
scrollPane.setViewportView(table);
initDataBindings();
}
protected void initDataBindings()
{
}
public JXTable getTable()
{
return table;
}
}
4. assitant class.
package com.vsa.bin;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
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.event.CaretEvent;
import javax.swing.event.CaretListener;
import javax.swing.table.TableCellEditor;
import org.jdesktop.swingx.JXTable;
public class PropertyTableCellEditor extends AbstractCellEditor implements TableCellEditor, ActionListener,
ItemListener, Serializable
{
protected ArrayList<JComponent> editors = new ArrayList<JComponent>();
protected HashMap<Integer, Object> newValues = new HashMap<Integer, Object>();
private JXTable table;
public PropertyTableCellEditor()
{
super();
}
public void addTableCellEditor(final JTextField textField, int row)
{
textField.addCaretListener(new CaretListener()
{
public void caretUpdate(CaretEvent e)
{
// is Auto-generated method stub
table.setValueAt(textField.getText(), table.getSelectedRow(), 1);
}
});
textField.addFocusListener(new FocusListener()
{
public void focusGained(FocusEvent e)
{
// is Auto-generated method stub
textField.selectAll();
}
public void focusLost(FocusEvent e)
{
// is Auto-generated method stub
}
});
editors.add(row, textField);
textField.addActionListener(this);
}
public void addTableCellEditor(final JCheckBox checkBox, int row)
{
editors.add(row, checkBox);
checkBox.addActionListener(this);
checkBox.setRequestFocusEnabled(false);
}
public void addTableCellEditor(final JComboBox comboBox, int row)
{
editors.add(row, comboBox);
comboBox.putClientProperty("JComboBox.isTableCellEditor", Boolean.TRUE);
comboBox.addActionListener(this);
}
public Object getCellEditorValue()
{
// is Auto-generated method stub
Object settedValue = this.table.getValueAt(this.table.getSelectedRow(), 1);
Log.show(settedValue);
return settedValue;
}
public Component getTableCellEditorComponent(JTable table, Object oldValue, boolean isSelected, int row, int column)
{
// is Auto-generated method stub
// if (editors.get(row) instanceof JCheckBox)
// {
// TableCellRenderer renderer = table.getCellRenderer(row, column);
// Component tableCellRendererComponent =
// renderer.getTableCellRendererComponent(table, oldValue, isSelected,
// true, row, column);
// if (tableCellRendererComponent != null)
// {
// editors.get(row).setOpaque(true);
// editors.get(row).setBackground(tableCellRendererComponent.getBackground());
// if (tableCellRendererComponent instanceof JComponent)
// {
// editors.get(row).setBorder(((JComponent)
// tableCellRendererComponent).getBorder());
// }
// }
// else
// {
// editors.get(row).setOpaque(false);
// }
// }
return editors.get(row);
}
public void clear()
{
this.editors.clear();
}
public void setTable(JXTable table)
{
this.table = table;
}
public void actionPerformed(ActionEvent e)
{
// is Auto-generated method stub
if (e.getSource() instanceof JTextField)
{
JTextField editor = (JTextField) e.getSource();
Object newValue = editor.getText();
this.table.setValueAt(newValue, this.table.getSelectedRow(), 1);
}
else if (e.getSource() instanceof JCheckBox)
{
JCheckBox editor = (JCheckBox) e.getSource();
Object newValue = (!editor.isSelected());
this.table.setValueAt(newValue, this.table.getSelectedRow(), 1);
}
else if (e.getSource() instanceof JComboBox)
{
JComboBox editor = (JComboBox) e.getSource();
Object newValue = editor.getSelectedItem();
this.table.setValueAt(newValue, this.table.getSelectedRow(), 1);
}
this.stopCellEditing();
}
public void itemStateChanged(ItemEvent e)
{
// is Auto-generated method stub
this.stopCellEditing();
}
}
5. Demo Image.
Here is the JTable created.
6. Different row has different cellEditor.
JTextField cell editor...
JComboBox cell editor...
JCheckBox cell editor... not completed now!!!
- HowTo JTable or JXTable
- HowTo
- jtable
- JTable
- JTable
- JTable
- JTable
- JTABLE
- JTable
- JTABLE
- JTable
- jTABLE
- JTable
- JTable
- JTable
- JTable
- JTable
- JTable
- Keil C51的本征库函数(intrinsic routines)
- Splay Tree 伸展树
- win7小工具之凭据管理器
- 我的博客
- 平衡二叉树 详解
- HowTo JTable or JXTable
- Linux 线程模型的比较:LinuxThreads 和 NPTL
- Swing布局管理器介绍
- I'm here
- 用惯了VisualStudio的goto definition, 今天才知道有ctags这玩意儿,挺好用的!
- 不做毫无风险的项目
- 冷咖啡—断章
- SwingUtilities中invokeLater和invokeAndWait
- 毕业~!