JTableの水平JScrollBarをリサイズ可能にするためJSplitPaneに再配置する
Total: 1951
, Today: 1
, Yesterday: 0
Posted by aterai at
Last-modified:
概要
JTable
を配置したJScrollPane
から水平JScrollBar
を取り出し、JSplitPane
に再配置してリサイズ可能にします。
Screenshot
Advertisement
サンプルコード
DefaultTableModel m1 = new DefaultTableModel(100, 256);
JTable table = new JTable(m1);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
JScrollPane scroll = new JScrollPane(table);
scroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
JPanel panel = new JPanel(new BorderLayout());
panel.setOpaque(false);
panel.setBorder(BorderFactory.createEmptyBorder(3, 0, 0, 0));
panel.add(scroll.getHorizontalScrollBar());
JSplitPane horizontalBox = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
horizontalBox.setBackground(Color.WHITE);
horizontalBox.setLeftComponent(box);
horizontalBox.setRightComponent(panel);
horizontalBox.setContinuousLayout(true);
horizontalBox.setBorder(BorderFactory.createEmptyBorder());
EventQueue.invokeLater(() -> horizontalBox.setDividerLocation(.4));
JLabel tripleColon = new JLabel("⫶");
tripleColon.setForeground(Color.GRAY);
tripleColon.setBorder(BorderFactory.createEmptyBorder(3, 0, 0, 0));
BasicSplitPaneDivider divider = ((BasicSplitPaneUI) horizontalBox.getUI()).getDivider();
divider.setLayout(new BorderLayout());
divider.setBorder(BorderFactory.createEmptyBorder());
divider.setBackground(Color.WHITE);
divider.add(tripleColon);
divider.setDividerSize(8);
View in GitHub: Java, Kotlin解説
JTable
をJScrollPane
に追加しJScrollPane#getHorizontalScrollBar()
で水平スクロールバーを取得JSplitPane
の右コンポーネントとして上記の水平スクロールバーを再配置JSplitPane
のDivider
をマウスでドラッグして水平スクロールバーの幅を変更可能
JSplitPane
の左コンポーネントとしてJTable
のモデル切り替えを実行するJRadioButton
などを配置JTable
のモデル切り替えでJSplitPane
に移動した水平スクロールバーのBoundedRangeModel
も自動的に更新される