Java Custom ColorChooserPanel

Я хочу создать кастом ColorChooserPanel за JcolorChooser в качелях Java.

public class ColorPanel  extends AbstractColorChooserPanel {

    public void buildChooser() {
        setLayout(new GridLayout(1, 3));
        makeAddButton("Red", Color.red);
        makeAddButton("Green", Color.green);
        makeAddButton("Blue", Color.blue);  }

        public void updateChooser() {
        }
        public String getDisplayName() {
            return "MyChooserPanel";  }

        public Icon getSmallDisplayIcon() {
            return null;  }

        public Icon getLargeDisplayIcon() {
            return null;  }

        private void makeAddButton(String name, Color color) {
            JButton button = new JButton(name);
            button.setBackground(color);
            button.setAction(new AbstractAction() {
                private static final long serialVersionUID = 1L;

                public void actionPerformed(ActionEvent arg0) {
                    JButton button = (JButton) arg0.getSource();
                    getColorSelectionModel().setSelectedColor(button.getBackground());

            }});
            add(button);  }
}

Он должен показывать кнопку 3 цвета, но вместо этого он показывает кнопку 6. Кто-нибудь может показать мне, где я что-то не так понял? И как я могу удалить панель ниже.

ColorPanel colorPanel  = new ColorPanel();
colorPanel.buildChooser();
colorChooser =  new JColorChooser();
colorChooser.addChooserPanel(colorPanel);

Другой вопрос: могу ли я удалить недавнюю панель с помощью цветной панели образцов. Я просто хочу показать только цветную палитру. Я имею в виду "недавнюю" часть на картинке ниже.

1 ответ

ColorPanel colorPanel  = new ColorPanel();
// colorPanel.buildChooser(); <-- remove this line

Когда вы добавляете colorPanel к JChooserPanelэтот метод вызывается:

public void installChooserPanel(JColorChooser enclosingChooser) {
    if (chooser != null) {
        throw new RuntimeException ("This chooser panel is already installed");
    }
    chooser = enclosingChooser;
    chooser.addPropertyChangeListener("enabled", enabledListener);
    setEnabled(chooser.isEnabled());
    buildChooser();
    updateChooser();
}

Таким образом, вам не нужно снова "строить" панель, так как она уже создана, когда вы добавили ее в colorChooser,

Другие вопросы по тегам