Нет заголовков в JTable

Jtable не показывает заголовки столбцов. Я использую векторы для заполнения JTable, но, похоже, это не работает. Вот код:

public class InsertFileToJtable extends AbstractTableModel{
Vector data;
Vector columns;
private String[] colNames = {"col1","col2","col3","col4","col5","col6","col7","col8"};


public InsertFileToJtable() {
String line;
data = new Vector();
columns = new Vector();
  try {
        FileInputStream fis = new FileInputStream("ProcessList.txt");
        BufferedReader br = new BufferedReader(new InputStreamReader(fis));
        StringTokenizer st1 = new StringTokenizer(br.readLine(), " ");
        while (st1.hasMoreTokens())
                columns.addElement(st1.nextToken());
        while ((line = br.readLine()) != null) {
                StringTokenizer st2 = new StringTokenizer(line, " ");
                while (st2.hasMoreTokens())
                       data.addElement(st2.nextToken());
        }
        br.close();
} catch (Exception e) {
        e.printStackTrace();
}  

}

public int getRowCount() {
return data.size() / getColumnCount();
}

public int getColumnCount() {
return columns.size()-1;
}

public Object getValueAt(int rowIndex, int columnIndex) {
return (String) data.elementAt((rowIndex * getColumnCount())
                + columnIndex);
}
@Override
public String getColumnName(int column) {
return colNames[column];
}
@Override
public Class getColumnClass(int col){
return getValueAt(0,col).getClass();
}
}

Вот как таблица вызывается из Main:

public static void main(String[] args) {
    InsertFileToJtable model = new InsertFileToJtable();
    JTable table = new JTable(model);
    table.setPreferredScrollableViewportSize(new Dimension(500, 70));
    table.setFillsViewportHeight(true);
    table.setModel(model);
    JScrollPane scrollpane = new JScrollPane(table);
    scrollpane.setViewportView(tabbedPane);
    tabbedPane.addTab("Process",null,table,"");
    model.fireTableStructureChanged();
    JPanel panel = new JPanel();
    panel.add(scrollpane);
    frame.add(panel);
    }

Поскольку я новичок, я понятия не имею, что не так. Любая помощь будет высоко ценится. Спасибо!


person Ingila Ejaz    schedule 23.09.2012    source источник
comment
Кстати: никогда не запускайте событие модели от имени модели — оно должно сделать это само, если это уместно.   -  person kleopatra    schedule 23.09.2012


Ответы (2)


Чтобы таблица могла отображать свои заголовки, вам нужно добавить таблицу в область прокрутки.

Вы начали хорошо, но затем удалили его, изменив окно просмотра панели прокрутки.

// This was good
JScrollPane scrollpane = new JScrollPane(table);
// Then you changed it
scrollpane.setViewportView(tabbedPane);
// Then you added it to the tabbed pane
tabbedPane.addTab("Process",null,table,"");

Попробуйте добавить таблицу обратно на панель прокрутки и добавьте ее на панель с вкладками.

person MadProgrammer    schedule 23.09.2012
comment
опередил на долю секунды :-) - person kleopatra; 23.09.2012
comment
Всегда рад быть вторым после тебя ;) - person MadProgrammer; 23.09.2012
comment
@MadProgrammer Я сделал это, но теперь вся вкладка процесса удалена из панели вкладок :( что можно сделать не так? :( - person Ingila Ejaz; 23.09.2012
comment
tabbedPane.addTab (Процесс, null, новый JScrollPane (таблица),) - person MadProgrammer; 23.09.2012
comment
Большое спасибо!! 1 проблема решена :) - person Ingila Ejaz; 23.09.2012

Заголовок добавляется автоматически, только если таблица находится в JScrollPane. Если он не содержится в scrollPane, вам придется управлять заголовком вручную. В вашем коде он сначала добавляется в scrollPane, но потом снова удаляется — путем добавления таблицы в tabbedPane. Вероятно, это не то, что вы хотите, вместо этого добавьте scrollPane на вкладку:

JScrollPane scrollpane = new JScrollPane(table);
//scrollpane.setViewportView(tabbedPane);
tabbedPane.addTab("Process",null,scrollPane,"");
person kleopatra    schedule 23.09.2012
comment
Я сделал это, но теперь вкладка «Процесс» исчезла с панели вкладок :( проблема не была решена :( @kleopatra - person Ingila Ejaz; 23.09.2012
comment
@IngilaEjaz та же проблема и процедура, что и раньше: добавьте панель вкладок на панель, а не панель прокрутки. - person kleopatra; 23.09.2012