Макет формы для вызова JColorChooser - PullRequest
1 голос
/ 20 июня 2011

Я пишу программу на Java Swing, которая должна позволять пользователю выбирать 8 различных цветов из формы настроек. Это довольно просто в том, что касается JColorChooser, но мне интересно, есть ли рекомендуемый способ размещения формы. Вот что я сейчас обдумываю:

  1. Для каждого цвета

  2. Отображение квадрата в текущем выбранном цвете,

  3. Справа от этого дисплея отображается кнопка, которая вызывает JColorChooser для изменения выбранного цвета.

Тем не менее, я подозреваю, что 8 кнопок сделают форму неуклюжей, если не совсем уродливой (особенно если больше будет добавлено позже). Альтернативный подход мог бы сделать квадрат двойным как кнопка; в таком случае, как визуально указать, что он кликабелен?

Есть ли альтернативный рекомендуемый метод?

Ответы [ 2 ]

5 голосов
/ 20 июня 2011

Вот ColorButton, который я использую в API pscode.

package org.pscode.ui.widget;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.*;
import javax.swing.*;

/** Provides a button for popping a color chooser.
The Color can be obtained by calling ColorButton.getBackground().
@author Andrew Thompson. */
public class ColorButton extends JButton implements ActionListener {

    private JColorChooser chooseColor;
    private String htmlColor;

    private String text;

    public ColorButton(String label) {
        super(label);
        text = label;
        chooseColor = new JColorChooser();
        addActionListener( this );
    }

    @Override
    public void setText(String text) {
        super.setText(
            "<html><body style='text-align: left;'><center>" +
            "<p>" +
            text +
            "<br>" +
            "<span style='width: 5px; height: 5px; " +
            "border: solid 1px black; background-color: " +
            htmlColor +
            "; color: " +
            htmlColor +
            ";'>AA</span>  " +
            "</center></body></html>");
        this.text = text;
    }

    public void actionPerformed(ActionEvent ae) {
        Color c = chooseColor.showDialog(
            this,
            "Choose Color",
            getBackground() );
        if (c!=null) {
            setBackground(c);
        }
    }

    @Override
    public void setBackground(Color bg) {
        super.setBackground( new Color(bg.getRed(), bg.getGreen(), bg.getBlue()) );
        int r = bg.getRed();
        int g = bg.getGreen();
        int b = bg.getBlue();

        htmlColor = "rgb(" + r + "," + g + "," + b + ")";
        setText(text);
    }
}

Скриншот

Снимок экрана типичного использования.

Color scheme chooser using ColorButtons

В других новостях ..

@ rwallace: как вы получили их одинаковой формы (независимо от длины заголовка) ..

Эта часть макета (для 5 кнопок и флажка) использует GridLayout. Вы также можете изменить размер кнопок:

  1. Установка предпочтительного размера (опасно предполагать, что мы можем его угадать).
  2. Добавление некоторого отступа в стиле для элемента body HTML.

".. а со слегка закругленными углами и блестящим эффектом?"

DukeBox (из которого был получен этот скриншот) использует родной PLAF - я использую Windows 7.

1 голос
/ 20 июня 2011

В качестве альтернативы рассмотрите возможность реализации интерфейса Icon и использования значка на кнопке.Вместе PieceButton и ColorIcon составляют пример .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...