gpt4 book ai didi

Java JTable 检测用户调整大小的列

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:16:35 25 4
gpt4 key购买 nike

我有一个使用 TableColumnModelListener() 的 JTable检测何时调整了列的大小并且我有一些我想在 columnMarginChanged() 中执行的代码方法。

如何确定列的大小是由用户调整的还是其他代码的结果?

我想我必须从 ChangeEvent.getSource() 开始但我不知道从那里去哪里。

谢谢。

最佳答案

我可以给你一个可能的方法。我试图解决同样的问题,因为我想将有关列宽的信息序列化到磁盘,以便下次在我的应用程序中打开表时,我可以适本地恢复列宽。开始了:

第 1 步 - 覆盖您的 JTable 并向其添加 boolean 属性

class MyTable extends JTable {

private boolean isColumnWidthChanged;
public boolean getColumnWidthChanged() {
return isColumnWidthChanged;
}

public void setColumnWidthChanged(boolean widthChanged) {
isColumnWidthChanged = widthChanged;
}

}

第 2 步 - 将 TableColumnModelListener() 添加到表中

private class TableColumnWidthListener implements TableColumnModelListener
{
@Override
public void columnMarginChanged(ChangeEvent e)
{
/* columnMarginChanged is called continuously as the column width is changed
by dragging. Therefore, execute code below ONLY if we are not already
aware of the column width having changed */
if(!tableObj.hasColumnWidthChanged())
{
/* the condition below will NOT be true if
the column width is being changed by code. */
if(tableObj.getTableHeader.getResizingColumn() != null)
{
// User must have dragged column and changed width
tableObj.setColumnWidthChanged(true);
}
}
}

@Override
public void columnMoved(TableColumnModelEvent e) { }

@Override
public void columnAdded(TableColumnModelEvent e) { }

@Override
public void columnRemoved(TableColumnModelEvent e) { }

@Override
public void columnSelectionChanged(ListSelectionEvent e) { }
}

第 3 步 - 将鼠标监听器添加到表头

private class TableHeaderMouseListener extends MouseAdapter
{
@Override
public void mouseReleased(MouseEvent e)
{
/* On mouse release, check if column width has changed */
if(tableObj.getColumnWidthChanged())
{
// Do whatever you need to do here

// Reset the flag on the table.
tableObj.setColumnWidthChanged(false);
}
}
}

注意:在我的应用程序中,TableHeaderMouseListener 和 TableColumnWidthListener 类是我的主应用程序类的私有(private)内部类。我的主要应用程序类坚持对正在观察的表格的引用。因此,这些内部类可以访问表实例。显然,根据您的设置,您需要做适当的事情来使表实例对这些其他类可用。希望这对您有所帮助!

关于Java JTable 检测用户调整大小的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8752694/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com