/* * Copyright (c) 2014 tabletoptool.com team. * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html * * Contributors: * rptools.com team - initial implementation * tabletoptool.com team - further development */ package com.t3.swing; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Frame; import java.awt.Paint; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JColorChooser; import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTabbedPane; import javax.swing.colorchooser.AbstractColorChooserPanel; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; public class PaintChooser extends JPanel { private JColorChooser swatchColorChooser; private JColorChooser hueColorChooser; private JColorChooser rgbColorChooser; private Paint paint; private PaintedPanel previewPanel; private JTabbedPane tabbedPane; private JDialog dialog; public PaintChooser() { setLayout(new BorderLayout()); tabbedPane = new JTabbedPane(); previewPanel = new PaintedPanel(); previewPanel.setBorder(BorderFactory.createLineBorder(Color.black)); previewPanel.setPreferredSize(new Dimension(150, 100)); swatchColorChooser = createSwatchColorChooser(); swatchColorChooser.setColor(Color.white); hueColorChooser = createHueColorChooser(); hueColorChooser.setColor(Color.white); rgbColorChooser = createRGBColorChooser(); rgbColorChooser.setColor(Color.white); tabbedPane.addTab("Swatch", swatchColorChooser); tabbedPane.addTab("Hue", hueColorChooser); tabbedPane.addTab("RGB", rgbColorChooser); add(BorderLayout.CENTER, tabbedPane); add(BorderLayout.SOUTH, createSouthPanel()); } public void addPaintChooser(AbstractPaintChooserPanel panel) { tabbedPane.addTab(panel.getDisplayName(), panel); } public Paint getPaint() { return paint; } public void setPaint(Paint paint) { this.paint = paint; previewPanel.setPaint(paint); } private JPanel createSouthPanel() { JPanel panel = new JPanel(new BorderLayout()); panel.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5), BorderFactory.createLoweredBevelBorder())); panel.add(previewPanel); return panel; } private JPanel createButtonPanel(JDialog dialog) { JPanel panel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); panel.add(createOKButton(dialog)); panel.add(createCancelButton(dialog)); return panel; } private JButton createOKButton(final JDialog dialog) { JButton button = new JButton("OK"); button.addActionListener(new ActionListener() { @Override public void actionPerformed(java.awt.event.ActionEvent e) { dialog.setVisible(false); } }); return button; } private JButton createCancelButton(final JDialog dialog) { JButton button = new JButton("Cancel"); button.addActionListener(new ActionListener() { @Override public void actionPerformed(java.awt.event.ActionEvent e) { paint = null; dialog.setVisible(false); } }); return button; } private JColorChooser createSwatchColorChooser() { final JColorChooser chooser = new JColorChooser(); for (AbstractColorChooserPanel panel : chooser.getChooserPanels()) { if (!panel.getDisplayName().startsWith("S")) { // Swatch panel chooser.removeChooserPanel(panel); } } chooser.setPreviewPanel(new JLabel()); chooser.getSelectionModel().addChangeListener(new ChangeListener(){ @Override public void stateChanged(ChangeEvent e) { setPaint(chooser.getColor()); hueColorChooser.setColor(chooser.getColor()); rgbColorChooser.setColor(chooser.getColor()); } }); return chooser; } private JColorChooser createHueColorChooser() { final JColorChooser chooser = new JColorChooser(); for (AbstractColorChooserPanel panel : chooser.getChooserPanels()) { if (!panel.getDisplayName().startsWith("H")) { // Swatch panel chooser.removeChooserPanel(panel); } } chooser.setPreviewPanel(new JLabel()); chooser.getSelectionModel().addChangeListener(new ChangeListener(){ @Override public void stateChanged(ChangeEvent e) { setPaint(chooser.getColor()); swatchColorChooser.setColor(chooser.getColor()); rgbColorChooser.setColor(chooser.getColor()); } }); return chooser; } private JColorChooser createRGBColorChooser() { final JColorChooser chooser = new JColorChooser(); for (AbstractColorChooserPanel panel : chooser.getChooserPanels()) { if (!panel.getDisplayName().startsWith("R")) { // Swatch panel chooser.removeChooserPanel(panel); } } chooser.setPreviewPanel(new JLabel()); chooser.getSelectionModel().addChangeListener(new ChangeListener(){ @Override public void stateChanged(ChangeEvent e) { setPaint(chooser.getColor()); swatchColorChooser.setColor(chooser.getColor()); hueColorChooser.setColor(chooser.getColor()); } }); return chooser; } public Paint choosePaint(Frame owner, Paint paint) { return choosePaint(owner, paint, "Choose Paint"); } public Paint choosePaint(Frame owner, Paint paint, String title) { if (dialog == null) { dialog = new JDialog(owner, true); dialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE); dialog.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { PaintChooser.this.paint = null; dialog.setVisible(false); } }); JPanel panel = new JPanel(new BorderLayout()); panel.add(BorderLayout.CENTER, this); panel.add(BorderLayout.SOUTH, createButtonPanel(dialog)); dialog.setContentPane(panel); dialog.pack(); SwingUtil.centerOver(dialog, owner); } dialog.setTitle(title); setPaint(paint); dialog.setVisible(true); return getPaint(); } }