サイズ変更可能な列を使用してJScrollPane内にJTableを作成する必要があります。 これは私が使用しているtable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
です。 また、ビューポートの幅がテーブル全体を含むのに十分な場合、ビューポートの幅を埋めるために列を引き伸ばす必要があります。一つのことを除いて、JTableの自動サイズ変更を、ビューポートに適合する場合にのみ有効にします。
@Override
public boolean getScrollableTracksViewportWidth() {
return getPreferredSize().width < getParent().getWidth();
}
このアプローチは、良い作品: は、私は次のようにJTableのクラスのgetScrollableTracksViewportWidth()
メソッドをオーバーライドする必要があり、これを達成するために、私が初めてそれがポジションを開始するための独自の幅を返す列のサイズを変更しようとします。私はすぐに列のサイズを変更し、マウスの表をリリースすると、良い仕事を続けます。 そのような動作の理由は何ですか? getScrollableTracksViewportWidth()
がfalseを返してもテーブルがサイズを変更しようとしているのはなぜですか?または、おそらく、あなたはそのようなサイズ変更モードを実装するためのより良い解決策を提案できますか?
ベローは、上記の問題の簡単な作業例です:あなたは、列のサイズを大きくしようとしたときに水平スクロールバーが表示されていないたときには、デフォルトdoLayout()
ロジックが働いていなかったように思えた
import javax.swing.*;
public class TestTable {
private static Object[][] data = new Object[][] {
{ "a", "b", "c" },
{ "d", "e", "f" }
};
private static Object[] colNames = new Object[] { "1", "2", "3" };
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JTable table = new JTable(data, colNames) {
@Override
public boolean getScrollableTracksViewportWidth() {
return getPreferredSize().width < getParent().getWidth();
}
};
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new JScrollPane(table));
frame.pack();
frame.setVisible(true);
}
});
}
}
優れています。 – user2137020
他の実装については、http://stackoverflow.com/questions/15499255/jtable-with-autoresize-horizontal-scrolling-and-shrinkable-first-columnも参照してください。 – camickr
魅力的な作品です!私は完全に動作することがわかった唯一の解決策です。 –