Swing/ResizableHorizontalScrollBar のバックアップ(No.1)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/ResizableHorizontalScrollBar へ行く。
- 1 (2021-04-12 (月) 03:24:47)
- category: swing folder: ResizableHorizontalScrollBar title: JTableの水平JScrollBarをリサイズ可能にするためJSplitPaneに再配置する tags: [JScrollBar, JSplitPane, JTable, JScrollPane] author: aterai pubdate: 2021-04-12T03:23:04+09:00 description: JTableを配置したJScrollPaneから水平JScrollBarを取り出し、JSplitPaneに再配置してリサイズ可能にします。 image: https://drive.google.com/uc?id=182ApSMU7uEGWzk3ANEO3L_RRDbn7U2W7
概要
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
も自動的に更新される