Swing/SaveRestoreRecentSwatch のバックアップ(No.1)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/SaveRestoreRecentSwatch へ行く。
- 1 (2023-08-21 (月) 02:01:55)
- category: swing folder: SaveRestoreRecentSwatch title: JColorChooserのSwatchesタブに配置されたRecentカラーパレットを保存、復元する tags: [JColorChooser, JPanel] author: aterai pubdate: 2023-08-21T02:00:07+09:00 description: JColorChooserのサンプル(Swatches)タブに配置されている最新(Recent)カラーパレットを保存、復元可能になるよう設定します。 image: https://drive.google.com/uc?id=1TgGl797HaTynH4nyLDgHODJ8fj7HbJ4Y
概要
JColorChooserのサンプル(Swatches)タブに配置されている最新(Recent)カラーパレットを保存、復元可能になるよう設定します。
Screenshot
Advertisement
サンプルコード
RecentSwatchPanel switchPanel = new RecentSwatchPanel();
switchPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
switchPanel.colors[0] = Color.RED;
switchPanel.colors[1] = Color.GREEN;
switchPanel.colors[2] = Color.BLUE;
JButton button = new JButton("open JColorChooser");
button.addActionListener(e -> {
JColorChooser cc = new JColorChooser();
AbstractColorChooserPanel[] panels = cc.getChooserPanels();
List<AbstractColorChooserPanel> choosers = new ArrayList<>(Arrays.asList(panels));
choosers.remove(0);
MySwatchChooserPanel swatch = new MySwatchChooserPanel();
swatch.addPropertyChangeListener("ancestor", event -> {
Color[] colors = swatch.recentSwatchPanel.colors;
if (event.getNewValue() == null) {
System.arraycopy(
colors, 0, switchPanel.colors, 0, colors.length);
} else {
System.arraycopy(
switchPanel.colors, 0, colors, 0, colors.length);
}
});
choosers.add(0, swatch);
cc.setChooserPanels(choosers.toArray(new AbstractColorChooserPanel[0]));
ColorTracker ok = new ColorTracker(cc);
Component parent = getRootPane();
String title = "JColorChooser";
JDialog dialog = JColorChooser.createDialog(
parent, title, true, cc, ok, null);
dialog.addComponentListener(new ComponentAdapter() {
@Override public void componentHidden(ComponentEvent e) {
((Window) e.getComponent()).dispose();
}
});
dialog.setVisible(true);
switchPanel.repaint();
Color color = ok.getColor();
if (color != null) {
label.setBackground(color);
}
});
View in GitHub: Java, Kotlin解説
JColorChooser
をシリアライズしてもサンプル(Swatches
)タブで使用される最新(Recent
)カラーパレットは保存、復元不可(未対応?)- また、サンプル(
Swatches
)タブで使用されるDefaultSwatchChooserPanel
はパッケージプライベートなので、これをコピーしてMySwatchChooserPanel
を作成- 最新(
Recent
)カラーパレット用のRecentSwatchPanel
もパッケージプライベートなのでこれをパブリックに変更し、外部から操作可能に変更
- 最新(
JColorChooser#setChooserPanels(...)
でMySwatchChooserPanel
を使用するサンプル(Swatches
)パネルを差し替え- サンプル(
Swatches
)パネルにPropertyChangeListener
を追加:- 親パネルへの追加イベントで最新(
Recent
)カラーパレットへの色配列復元を実行 - 親パネルからの削除イベントで最新(
Recent
)カラーパレットからの色配列取得を実行
- 親パネルへの追加イベントで最新(