📄 columntable.java
字号:
package com.testDataBuilder.ui.main;
import java.awt.Component;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import javax.swing.DefaultCellEditor;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableColumn;
import com.testDataBuilder.config.ColumnConfig;
import com.testDataBuilder.resources.RM;
import com.testDataBuilder.ui.core.JComboBoxEx;
import com.testDataBuilder.ui.util.ColumnInfo;
public class ColumnTable extends JTable {
static final int EDIT_COLUMN = 2;
private List<ColumnInfo> columnNames = null;
public ColumnTable(){
super();
init();
}
protected void init(){
setModel(new ColumnTableModel(getColumnNames()));
this.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
for(int i=0; i < this.getColumnModel().getColumnCount(); i++){
TableColumn fieldColumn =this.getColumnModel().getColumn(i);
switch(i){
case 0://字段名列.
fieldColumn.setCellEditor(new ComboxCellEditor(getFieldsComboBox()));
break;
case 1://ref参照
fieldColumn.setCellEditor(new ComboxCellEditor(getRefComboBox()));
break;
case EDIT_COLUMN:
fieldColumn.setCellEditor(new ButtonCellEditor(new JCheckBox(RM.R("label.ColumnTable.edit"))));
fieldColumn.setCellRenderer(new javax.swing.table.DefaultTableCellRenderer.UIResource(){
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
this.setHorizontalAlignment(CENTER);
return super.getTableCellRendererComponent(table, value, isSelected, hasFocus,
row, column);
}
});
break;
default:
}
fieldColumn.setPreferredWidth(this.getColumnNames().get(i).getWidth());
}
//
// this.addMouseListener(new MouseAdapter(){
// @Override
// public void mouseReleased(MouseEvent e) {
// ColumnTable.this.editRole(e);
// }
//
// });
}
private List<ColumnInfo> getColumnNames() {
if(columnNames == null){
columnNames = new ArrayList<ColumnInfo>();
columnNames.add(new ColumnInfo(RM.R("label.ColumnTable.columnName.columnName"), 100)); //$NON-NLS-1$
columnNames.add(new ColumnInfo(RM.R("label.ColumnTable.columnName.refRole"), 150)); //$NON-NLS-1$
columnNames.add(new ColumnInfo(RM.R("label.ColumnTable.columnName.editRole"), 50)); //$NON-NLS-1$
columnNames.add(new ColumnInfo(RM.R("label.ColumnTable.columnName.isPK"), 5)); //$NON-NLS-1$
}
return columnNames;
}
private JComboBoxEx fieldComboBox = null;
public JComboBoxEx getFieldsComboBox(){
if(fieldComboBox == null){
fieldComboBox = new JComboBoxEx();
}
return fieldComboBox;
}
public void setFields(List fields){
this.getFieldsComboBox().setData(fields);
}
private JComboBoxEx refComboBox = null;
public JComboBoxEx getRefComboBox(){
if(refComboBox == null){
refComboBox = new JComboBoxEx();
refComboBox.setToolTipText(RM.R("label.ColumnTable.toolTip")); //$NON-NLS-1$
}
return refComboBox;
}
public void setRefs(List ref){
if(ref != null){
ref.add(0, ""); //$NON-NLS-1$
}
this.getRefComboBox().setData(ref);
}
public ColumnTableModel getDataModel() {
return (ColumnTableModel) dataModel;
}
public List<ColumnConfig> getData(){
return this.getDataModel().getData();
}
public void setData(List<ColumnConfig> columnData) {
this.getDataModel().setData(columnData);
this.clearSelection();
this.updateUI();
}
public void addRow(){
int size = this.getData().size();
this.getData().add(new ColumnConfig("column" + size)); //$NON-NLS-1$
this.updateUI();
}
public Class<?> getColumnClass(int column) {
Object value = this.getValueAt(0, column);
if(value == null){
return Object.class;
}
return value.getClass();
}
public void deleteCurrentItem(){
this.getDataModel().deleteItem(this.getSelectedRow());
this.updateUI();
}
}
class ComboxCellEditor extends DefaultCellEditor{
public ComboxCellEditor(JComboBox comboBox) {
super(comboBox);
getComponent().addFocusListener(new FocusAdapter(){
@Override
public void focusLost(FocusEvent e) {
ComboxCellEditor.this.stopCellEditing();
}
});
}
@Override
public JComboBox getComponent() {
return (JComboBox)super.editorComponent;
}
}
class ColumnTableModel extends AbstractTableModel{
List<ColumnConfig> data = new ArrayList<ColumnConfig>();
List<ColumnInfo> columnInfos = null;
public ColumnTableModel(List<ColumnInfo> columnInfos){
this.columnInfos = columnInfos;
}
public ColumnTableModel(List<ColumnConfig> data, List<ColumnInfo> columnInfos){
this.data = data;
this.columnInfos = columnInfos;
}
public int getColumnCount() {
return columnInfos.size();
}
public int getRowCount() {
if(data == null){
return 0;
}
return data.size();
}
public Object getValueAt(int rowIndex, int columnIndex) {
ColumnConfig columnConfig = data.get(rowIndex);
Object value = null;
switch(columnIndex){
case 0:
value = columnConfig.getName();
break;
case 1:
value = columnConfig.getRef();
break;
case 2:
value = RM.R("label.ColumnTable.edit");
break;
case 3:
value = columnConfig.isPK();
break;
default:
value = ""; //$NON-NLS-1$
}
return value;
}
@Override
public int findColumn(String columnName) {
return this.columnInfos.indexOf(columnName);
}
@Override
public Class<?> getColumnClass(int columnIndex) {
Object value = this.getValueAt(0, columnIndex);
if(value == null){
return Object.class;
}
return value.getClass();
}
@Override
public String getColumnName(int column) {
ColumnInfo columnInfo = columnInfos.get(column);
return columnInfo.getName();
}
public int getColumnWidth(int column){
ColumnInfo columnInfo = columnInfos.get(column);
return columnInfo.getWidth();
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
// return columnIndex != 2;
return true;
}
@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
ColumnConfig columnConfig = this.getData().get(rowIndex);
switch(columnIndex){
case 0:
columnConfig.setName((String) aValue);
break;
case 1:
columnConfig.setRef((String)aValue);
break;
case 3:
columnConfig.setPK((Boolean) aValue);
break;
default:
}
}
public List<ColumnConfig> getData() {
return data;
}
public void setData(List<ColumnConfig> data) {
if(data == null){
data = new LinkedList<ColumnConfig>();
}
this.data = data;
}
public List<ColumnInfo> getColumnInfos() {
return columnInfos;
}
public void setColumnInfos(List<ColumnInfo> columnInfos) {
this.columnInfos = columnInfos;
}
public void deleteItem(int index){
this.getData().remove(index);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -