[英]JTable column width
這應該很容易解決,但是我看不到。 下面的JPanel僅包含一個ScrollPane(包含一個表)和一個Button。
我需要知道表格的實際列寬。 單擊該按鈕確實顯示了正確的值,但是內部調用只為每列輸出75(默認值)。 如何在此處的代碼中獲得正確的結果?
public MyPanel() { //JPanel
setLayout(new BorderLayout());
this.setBounds(0, 0, 1000, 250);
table = new JTable(5,6);
JScrollPane sp = new JScrollPane(table);
this.add(sp, BorderLayout.CENTER);
JButton b = new JButton("Test");
b.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
displayWidths(); //DOES WORK!
}
});
this.add(b, BorderLayout.SOUTH);
displayWidths(); //DOES NOT WORK!
}
private void displayWidths() {
for (int i = 0; i < table.getColumnCount(); i++) {
TableColumn column = table.getColumnModel().getColumn(i);
System.out.println("Width of column " + i + " : " + column.getWidth());
}
}
由於您的面板/表格已實現(在屏幕上可見),因此通過按鈕進行的呼叫有效。 內聯版本沒有,因為您的表尚未實現。
編輯
現在帶有經過測試的代碼:
public class TestGetColumnWidths {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame frame = new JFrame("Columns");
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
final JTable table = new JTable(5, 6);
table.getTableHeader().addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
super.componentResized(e);
displayColumnWidths(table.getTableHeader());
}
});
JPanel panel = new JPanel(new BorderLayout());
panel.add(new JScrollPane(table));
frame.add(panel);
//frame.pack();
frame.setSize(1000, 250);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
private void displayColumnWidths(JTableHeader header) {
TableColumnModel model = header.getColumnModel();
for (int i = 0; i < model.getColumnCount(); i++) {
TableColumn column = model.getColumn(i);
System.err.println("column.getWidth(): " + column.getWidth());
}
}
});
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.