изменить размер первого столбца таблицы, то есть номер показывает столбец в Java - PullRequest
3 голосов
/ 26 апреля 2011

Я включил пример кода моего приложения

1-й класс

import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import org.jdesktop.swingx.JXTable;
import javax.swing.table.TableColumn;

public class setcolwidth {

    public static void main(String args[]) {

        final Object rowData[][] = {
            {"kirti", "one", "I"},
            {"kkk", "two", "II"},
            {"kiki", "three", "III"}};
        final String columnNames[] = {"#", "English", "Roman"};

        final JTable table = new JTable(rowData, columnNames);
        JScrollPane scrollPane = new JScrollPane(table);

        JXTable lineTable = new LineNumberTable(table);
        scrollPane.setRowHeaderView(lineTable);
        table.getTableHeader().setReorderingAllowed(false);
        JFrame frame = new JFrame("Resizing Table");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.add(scrollPane, BorderLayout.CENTER);


        TableColumn column = null;
        int i=0;
        try{

            column = lineTable.getColumnModel().getColumn(i);

                column.setPreferredWidth(50);

        }catch(Exception ex){
            System.out.println("Error for the column index"+i+" Err"+ex.toString());
        }

        frame.setSize(300, 150);
        frame.setVisible(true);

    }
    }

и 2 класс

import javax.swing.JTable;
import javax.swing.table.*;
import org.jdesktop.swingx.JXTable;

public class LineNumberTable extends JXTable {
    private JTable mainTable;

    public LineNumberTable(JTable table) {
        super();
        mainTable = table;
        setAutoCreateColumnsFromModel( false );
        setModel( mainTable.getModel() );
        setAutoscrolls( false );
        addColumn( new TableColumn() );
        getColumnModel().getColumn(0).setCellRenderer(mainTable.getTableHeader().getDefaultRenderer());
      //  mainTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
        getColumnModel().getColumn(0).setPreferredWidth(40);
        setPreferredScrollableViewportSize(getPreferredSize());

    }

    @Override
    public boolean isCellEditable(int row, int column) {
        return false;
    }

    @Override
    public Object getValueAt(int row, int column) {
         return Integer.valueOf(row+1);
    }

    @Override
    public int getRowHeight(int row) {
        return mainTable.getRowHeight();
    }
}

Но столбец с номером строки не изменяется.

Ответы [ 2 ]

0 голосов
/ 26 апреля 2011

Я не использую JXTable, поэтому я не могу написать ваш код.Но ваша базовая логика мне подходит для JTable.

Посмотрите на мою таблицу номеров строк , которая работает для меня.Может быть, разница в том, как я создаю TableColumn и назначаю значение заголовка.

0 голосов
/ 26 апреля 2011

Это потому, что вы устанавливаете предпочтительный размер для столбца и вам нужно установить его на JViewport в заголовке строки.

После этой строки:

    scrollPane.setRowHeaderView(lineTable);

Попробуйте это:

    scrollPane.getRowHeader().setPreferredSize(new Dimension(150,150));
...