您的位置首页生活百科

Java JTable的使用

Java JTable的使用

的有关信息介绍如下:

Java JTable的使用

最近在使用JTable做交易系统的界面,因为之前没有类似经验,感觉做起来比较麻烦。

好在最终都能把想要的效果做出来了,现总结一下经验,供日后查阅参考。

设置单元格的渲染器为复选框,如下:

//设置表格和表头的默认渲染器

simpleTable.setDefaultRenderer(Object.class, simpleTableRender);

simpleTable.getTableHeader().setDefaultRenderer(headerRenderer);

//设置单元格的渲染器

checkBoxRenderer = new CheckBoxRenderer(simpleTable); simpleTable.getColumnModel().getColumn(0).setCellRenderer(checkBoxRenderer);

设置单元格的渲染器和编辑器为下拉框,如下:

simpleTable.getColumnModel().getColumn(3).setCellRenderer(comboBoxRenderer); simpleTable.getColumnModel().getColumn(3).setCellEditor(comboBoxCellEditor);

设置排序方法,如下:

sorter = new TableRowSorter((LogonStatusTableModel) simpleTable.getModel());

simpleTable.setRowSorter(sorter);

ArrayList list = new ArrayList();

list.add(new TableRowSorter.SortKey(1, SortOrder.ASCENDING));

sorter.setSortKeys(list);

sorter.sort();

sorter.setSortable(0, false);

设置表头的排序标识按钮,如下:

simpleTable.getTableHeader().addMouseListener(new HeaderMouseListener());

class HeaderMouseListener extends MouseAdapter {

@Override

public void mouseClicked(MouseEvent e) {

JTableHeader h = (JTableHeader) e.getSource();

TableColumnModel columnModel = h.getColumnModel();

TableCellRenderer tcr = h.getDefaultRenderer();

int viewColumn = columnModel.getColumnIndexAtX(e.getX());

if (viewColumn < 0)

return;

int column = columnModel.getColumn(viewColumn).getModelIndex();

if (column != -1 && tcr instanceof LogonStatusContentHeaderRenderer) {

LogonStatusContentHeaderRenderer sbr = (LogonStatusContentHeaderRenderer) tcr;

sbr.setSelectedColumn(column);

}

}

@Override

public void mouseReleased(MouseEvent e) {

((JTableHeader) e.getSource()).repaint();

}

}

设置数据返回值类型,如下:

//返回布尔值

@Override

public Class getColumnClass(int columnIndex) {

if (columnIndex == 0)

return Boolean.class;

else

return super.getColumnClass(columnIndex);

}

//返回Double类型,排序时会按Double类型排序

@Override

public Class getColumnClass(int columnIndex) {

if(columnIndex==2){

return Double.class;

}else

return super.getColumnClass(columnIndex);

}

设置某一列是否可以编辑,如下:

public boolean isCellEditable(int row, int column) {

if (row >= 0) {

SysParamStruct info = localMap.get(String.valueOf(row));

if (info == null) {

System.out.println("info null");

}

if (info != null) {

if (columnsOrder.elementAt(column) == EnumSysParaColumn.VALUE) {

return true;

}

if (columnsOrder.elementAt(column) == EnumSysParaColumn.STATUS) {

return true;

}

}

}

return false;

}

设置列的值,如下:

public Object getValueAt(int row, int column) {

if (row >= 0) {

SysParamStruct info = localMap.get(String.valueOf(row));

if (info == null) {

System.out.println("info null");

}

if (info != null) {

if (columnsOrder.elementAt(column) == EnumSysParaColumn.PARA_NAME) {

return info.getShortDesc();

} else if (columnsOrder.elementAt(column) == EnumSysParaColumn.PARA_DESC) {

return info.getLongDesc();

} else if (columnsOrder.elementAt(column) == EnumSysParaColumn.VALUE) {

return info.getValue();

} else if (columnsOrder.elementAt(column) == EnumSysParaColumn.STATUS) {

return info.getStatus();

}

}

}

return "";

}

使编辑的列值生效,如下:

public void setValueAt (Object value, int row, int column) {

SysParamStruct info = localMap.get(String.valueOf(row));

if (columnsOrder.elementAt(column) == EnumSysParaColumn.VALUE) {

info.setValue((String) value);

localMap.put(String.valueOf(row), info);

}

if (columnsOrder.elementAt(column) == EnumSysParaColumn.STATUS) {

char status = 0;

switch ((StatusType)value) {

case Active :

status = StatusType.Active.getValue();

break;

case Suspended :

status = StatusType.Suspended.getValue();

break;

case Deleted :

status = StatusType.Deleted.getValue();

break;

default :

break;

}

info.setStatus(status);

localMap.put(String.valueOf(row), info);

}

fireTableCellUpdated(row, column);

}

ComboBoxRenderer里面的内容,如下:

@Override

public Component getTableCellRendererComponent(

JTable table,

Object value,

boolean isSelected,

boolean hasFocus,

int row,

int column) {

oddColor = ResManager.getColor("Trade.OrderBook.TableCell.OddColor");

evenColor = ResManager.getColor("Trade.OrderBook.TableCell.EvenColor");

fgColor = ResManager.getColor("Trade.OrderBook.TableCell.textColor");

highlightBgColor = HVResMgr.getColor("Trade.OrderBook.TableCell.HighlightColor");

//set line background color

if ((row % 2) == 0) {

bgColor = oddColor;

}

else {

bgColor = evenColor;

}

// set highlight color

if (isSelected) {

bgColor = highlightBgColor;

}

//calculate the font size

double ratio = 1.0;

if (table instanceof BaseTable) {

ratio = ((BaseTable) table).getRatio();

}

int fontSize = (int) (font.getSize() * ratio);

font = new Font(font.getName(), font.getStyle(), fontSize);

this.comboBox.setBorder(null);

this.comboBox.setBackground(bgColor);

this.comboBox.setForeground(fgColor);

if (column == 3) {

StatusType status = null;

switch ((Character) value) {

case 'A' :

status = StatusType.Active;

break;

case 'S' :

status = StatusType.Suspended;

break;

case 'D' :

status = StatusType.Deleted;

break;

default :

break;

}

this.comboBox.setSelectedItem(status);

}

return this.comboBox;

}

ComboBoxCellEditor里面的内容,如下:

public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {

if (column == 3) {

StatusType status = null;

switch ((Character) value) {

case 'A' :

status = StatusType.Active;

break;

case 'S' :

status = StatusType.Suspended;

break;

case 'D' :

status = StatusType.Deleted;

break;

default :

break;

}

this.comboBox.setSelectedItem(status);

}

return this.comboBox;

}

@Override

public Object getCellEditorValue() {

return this.comboBox.getSelectedItem();

}