除非选择了单元格,否则JTable数据是不可见的

时间:2011-09-09 07:53:16

标签: java swing jtable

我正在使用2 Vector,rowData和columnNames中包含的数据创建JTable。我正在使用渲染器将我想要的颜色提供给JTable。但是,除非我单击一个单元格,否则数据是不可见的:那么只有该单元格数据可见。

我的代码:

   // Creating table
    final JTable tablaCurvas = new JTable();
    // Applng colours and column sizes with renderer
    TableCellRenderer tableRender = new TableRenderer();
    tablaCurvas.setDefaultRenderer(Object.class, tableRender);
    // Create an easy model to add data to table
    tablaCurvas.setModel(new DefaultTableModel(rowData, columnNames){
        private static final long serialVersionUID = 1L;
    @Override
       public boolean isCellEditable(int row, int column) {
           //Only the second column
           return column == 1;
       }

    });
    // Necessary clicks to edit cell
    ((DefaultCellEditor) tablaCurvas.getDefaultEditor(Object.class)).setClickCountToStart(1);
    // Add table into a scrollPane
    JScrollPane scrollPane = new JScrollPane(tablaCurvas);
    // Fill the pane
    tablaCurvas.setFillsViewportHeight(true);
    // Preferred size
    tablaCurvas.setPreferredScrollableViewportSize(new Dimension(150,100));

渲染器:

class TableRenderer extends DefaultTableCellRenderer
{
    private static final long serialVersionUID = 1L;
    public Component getTableCellRendererComponent(
                    JTable table,
                    Object value,
                    boolean isSelected,
                    boolean hasFocus,
                    int row,
                    int column)
    {       
        setEnabled(table == null || table.isEnabled());
        if (column == 0)
            setHorizontalAlignment(LEFT);
        else // (column == 1)
            setHorizontalAlignment(RIGHT);
        for (int i=0; i<2; i++) {
            TableColumn columna = table.getColumnModel().getColumn(i);
            if (i==0){
                columna.setPreferredWidth(150);
            }
            if (i==1) columna.setPreferredWidth(50);
        }
        setBackground(table.getBackground());
        setForeground(table.getForeground());
        if (row%2==1) setBackground(java.awt.Color.white);
        else setBackground(new java.awt.Color(211, 217, 255)); 

        return this;
    }

无论如何,从这一点开始,我发现学习如何使用JTable比其他对象更困难,因为Oracle Tutorial在该章中没有得到很好的解释。是否建议使用JTables的任何书籍章节或在线教程?

1 个答案:

答案 0 :(得分:4)

您必须设置DefaultTableCellRenderer组件的文本。

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

    //.... your code

    setText(value != null ? value.toString() : ""); // suppress null values
    return this;
}

此屏幕截图是使用一些示例数据拍摄的:

screenshot