0

「Pack All Columns」呼び出しを実行した後に何が起こるかに関して、JXTable で遭遇した特定のシナリオがあります (おそらく JTable の問題でさえあります)。

「Pack All Columns」は正常に機能しますが、手動で列幅を小さくすると、次に受信した TableModelEvent で、変更した列幅が常に大きくなります。JTable のプライベート setWidthsFromPreferredWidths() が最終的に呼び出され、これが犯人のように見えることに気付きました。

繰り返しますが、この問題は [すべての列をパック] を選択した後にのみ発生します。これは既知のバグですか、それとも「Pack All Columns」の意図した動作ですか?

4

1 に答える 1

0

私は実際にhttp://www.coderanch.com/で私の質問に対する答えを見つけました

columnMarginChanged(ChangeEvent)メソッドをオーバーライドして、列のgetWidth()getPreferredWidth()が同期していることを確認する必要がありました。

@Override
public void columnMarginChanged(final ChangeEvent e)
{
    super.columnMarginChanged(e);

    if (isEditing())
    {
        removeEditor();
    }
    TableColumn resizingColumn = null;
    if (tableHeader != null)
    {
        resizingColumn = tableHeader.getResizingColumn();
    }
    if (resizingColumn != null)
    {
        if (autoResizeMode == AUTO_RESIZE_OFF)
        {
            resizingColumn.setPreferredWidth(resizingColumn.getWidth());
        }
        else
        { 
            SwingUtilities.invokeLater(new Runnable()
            {

                @Override
                public void run()
                {
                    doLayout();
                    repaint();
                }
            });
        }
    }
    else
    {
        resizeAndRepaint();
    }
}
于 2015-11-18T15:43:32.883 に答える