Java 使可调整大小的JTable';s列';抗结构变化的宽度
在我的应用程序中,我有可调整大小的Java 使可调整大小的JTable';s列';抗结构变化的宽度,java,swing,jtable,jtableheader,Java,Swing,Jtable,Jtableheader,在我的应用程序中,我有可调整大小的JTable,有些只调整COL、row或两者。为此,我修改了TableModel,并对其执行structureDataChanged()方法 问题是我的列没有保持它们的宽度,而且总是变宽 已测试: 添加组件侦听器和侦听更改: this.getTableHeader().addComponentListener(new ComponentAdapter() { @Override public void componentResized(Comp
JTable
,有些只调整COL、row或两者。为此,我修改了TableModel
,并对其执行structureDataChanged()
方法
问题是我的列没有保持它们的宽度,而且总是变宽
已测试:
- 添加
侦听器和侦听更改:组件
this.getTableHeader().addComponentListener(new ComponentAdapter() { @Override public void componentResized(ComponentEvent e) { super.componentResized(e); displayColumnWidths(getTableHeader()); } private void displayColumnWidths(JTableHeader header) { TableColumnModel model = header.getColumnModel(); for (int i = 0; i < model.getColumnCount(); i++) { TableColumn column = model.getColumn(i); column.setMaxWidth(50); } } });
- 随着我开始失去希望,我也尝试了这两种方法
- 梅似乎有很有价值的解决办法。但是我仍然想知道为什么其他方法不起作用
fireStructureChange()
事件
当我调整我的JTable
的大小时,一些数组在随机时间被很好地标注,但它仍然是随机的,并且经常在时间上被延迟
额外信息
我使用这个类(只是一个JTable
),并使我的所有可调整大小的数组继承自它:
public Resizeable(AbstractTableModel m) {
super(m);
this.setRowMargin(0);
this.setShowGrid(false);
this.setBackground(ViewsPreferences.P_TABLE_BACKGROUND_COLOR);
this.setCellSelectionEnabled(true);
this.setBorder(null);
this.setIntercellSpacing(new Dimension(0,0));
this.changeSelection(0, 0, false, false);
this.getTableHeader().setBackground(ViewsPreferences.PANEL_BACKGROUND_COLOR);
this.setAutoResizeMode(AUTO_RESIZE_OFF);
this.setFillsViewportHeight(false);
}
structureChanged
可能不是最合适的事件,因为这会导致表在假设旧的TableColumnModel
不再有效的情况下重新生成它的TableColumnModel
。你有什么建议<代码>fireDataChanged()没有任何效果。如果它重新绘制了所有的JTable
,为什么第一个方法不起作用?(这是我的第一个问题。)你有什么建议?fireDataChanged()没有任何效果。
-这是我的建议,但我们不知道您实际上是如何更改TableModel中的数据的。为什么要使用自定义表格模型?DefaultTableModel有什么问题。如果您需要更多帮助,请发布一篇演示问题的文章。
public Resizeable(AbstractTableModel m) {
super(m);
this.setRowMargin(0);
this.setShowGrid(false);
this.setBackground(ViewsPreferences.P_TABLE_BACKGROUND_COLOR);
this.setCellSelectionEnabled(true);
this.setBorder(null);
this.setIntercellSpacing(new Dimension(0,0));
this.changeSelection(0, 0, false, false);
this.getTableHeader().setBackground(ViewsPreferences.PANEL_BACKGROUND_COLOR);
this.setAutoResizeMode(AUTO_RESIZE_OFF);
this.setFillsViewportHeight(false);
}