В приведенном ниже коде показаны 2 JTables.Повторное использование JTableHeader
Поскольку оба они будут иметь одинаковые заголовки, я хотел, ради эффективности, повторно использовать заголовок из первой таблицы.
Однако выполнение кода приводит к тому, что заголовок отображается во второй таблице, но не в таблице, изначально.
Меня интересуют только обходные пути, но - ради обучения и понимания - больше интересует, почему заголовок не отображается в первой таблице.
Вот код:
public class HeaderTest1 {
public void doTheTest() {
JFrame testFrame = new JFrame("Header Test");
JPanel pane = new JPanel();
Container theContentPane = testFrame.getContentPane();
BoxLayout box = new BoxLayout(pane, BoxLayout.Y_AXIS);
pane.setLayout(box);
theContentPane.add(pane);
String theData[][]
= {
{"One", "two", "3"},
{"four", "5", "six"},
{"7", "8", "9.0"},
{"£10.00", "11", "twelve"}
};
String columnNames[] = {"Column 1", "Column 2", "Column 3"};
JTable firstTable = new JTable(theData, columnNames);
JScrollPane thisScrollPane = new JScrollPane(firstTable);
JTableHeader thisTableHeader = firstTable.getTableHeader();
pane.add(thisScrollPane);
buildTheSecondTable(thisTableHeader, firstTable, columnNames, pane);
testFrame.pack();
testFrame.setVisible(true);
}
private void buildTheSecondTable(JTableHeader headerFromTheFirstTable,
JTable firstTable, String[] columnNames, JPanel pane) {
JTable secondTable = new JTable();
int columnCount = columnNames.length;
JScrollPane thisScrollPane = new JScrollPane(secondTable);
secondTable.setTableHeader(headerFromTheFirstTable);
Object[][] emptyData = new Object[1][columnCount];
for (int n = 0; n < columnCount; n++) {
emptyData[0][n] = "";
}
DefaultTableModel thisTableModel = new DefaultTableModel();
thisTableModel.setDataVector(emptyData, columnNames);
secondTable.setModel(thisTableModel);
secondTable.setLayout(firstTable.getLayout());
secondTable.setCellEditor(firstTable.getCellEditor());
pane.add(thisScrollPane);
}
public static void main(String[] args) throws SQLException, ParseException {
HeaderTest thisTest = new HeaderTest();
thisTest.doTheTest();
}
Любые советы будут оценены
* «Как они будут иметь одинаковые заголовки, которые я хотел, ради эффективности ...» * Значит ли термин «преждевременная оптимизация» что-то для вас? Это классический случай. –
О, BTW - компонент Java может появляться только в одном месте. –
@ Andrew Thompson. Возьмите свою «повторную оптимизацию». Однако я хотел узнать, почему это произошло, поэтому отправляя то, что было тривиальной проблемой – user3001792