2

Swing UI を使用してアプリケーションを拡張し、ユーザーがデフォルトの色の選択にとらわれないように色を選択できるようにします。

他のアプリケーションでは、カラー セレクターをアクティブにする各ボタンに影付きの四角形を描画し、新しい色が選択されるとそれに応じて四角形の色が変化するのが一般的です。ボタンに選択した色の小さなJPanelを配置して同じ効果を達成しようとしていますが、ボタンの表面の大部分を埋めるのではなく、ボタンの中央に小さな正方形ができます。

色付きの長方形のアイコンを動的に生成し、適切なアイコンを各ボタンに追加する別の方法があると思いますが、もっと簡単な方法があるはずですか?

4

3 に答える 3

3

たとえばJButton.setIcon、 expectedRectangleでそこに置く

編集

ボタンに選択した色の小さなJPanelを配置して同じ効果を達成しようとしていますが、ボタンの表面の大部分を埋めるのではなく、ボタンの中央に小さな正方形ができます。

のみJFrame (BorderLayout)であり、JPanel (FlowLayout)事前に実装されていますLayoutManager。残りの部分(1 つを別のものにJComponents追加) については、定義する必要があります。このスレッドをお読みくださいJComponentJComponentLayoutManager

于 2012-04-26T13:04:28.770 に答える
2

これは私のために働く setBackground を使った例です:

import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JColorChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Test {

    public static void main(String... args) {
        JFrame frame = new JFrame();
        JPanel panel = new JPanel();
        final JButton button = new JButton("Hello");
        button.setOpaque(true);
        panel.add(button);
        button.setBackground(Color.RED);
        button.setOpaque(true);
        button.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                Color c = JColorChooser.showDialog(button, "Choose a color", button.getBackground());
                if (c != null) {
                    button.setBackground(c);
                }
            }
        });
        frame.setContentPane(panel);
        frame.setPreferredSize(new Dimension(800, 600));
        frame.pack();
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.setVisible(true);
    }
}
于 2012-04-26T13:20:26.390 に答える
1

すべての swing コンポーネントは JComponent.drawComponent(...) メソッドを使用して描画されます。必要に応じて、デフォルトの動作をオーバーライドできます。たとえば、あなたが提案するようなパネルを作成するには。ただし、jpanels の背景色を変更してまったく同じことを実現できることに注意してください。

    JColorChooser chooser = new JColorChooser(Color.BLACK);
    chooser.setVisible(true);

    Color color = chooser.getColor();
    if (color!=null) {
        colorPanel.setBackground(color);
    }

colorPanel は、色を示す JPanel になります。

于 2012-04-26T13:08:29.427 に答える