Данные JTable невидимы, если не выбрана ячейка - PullRequest
1 голос
/ 09 сентября 2011

Я создаю JTable с данными, содержащимися в 2 Vector, rowData и columnNames.Я использую средство рендеринга, чтобы придать желаемый цвет 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;
    }

ЛюбойКстати, из этого я нахожу гораздо сложнее научиться использовать JTables, чем другие Объекты, потому что Oracle Tutorial не очень хорошо объяснен в этой главе.Любая книга-глава или онлайн-учебник для JTables рекомендуется?

1 Ответ

4 голосов
/ 09 сентября 2011

Вы должны установить текст для компонента 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...