1

JSlider を使用して RGB 値を表示するカラー セレクター アプリがあります。16進値も表示したいと思います。誰かが私を正しい方向に向けることができますか? パネルの右側に表示されるカラーボックスの下に 16 進値を表示したいと思います。

/*
* Program: ColorSlider.java
* Descrip: Using JSlider and BoxLayout
*/
package colorslider;

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

public class ColorSlider
{
    static JPanel controls, colorPanel;
    static JSlider rSlider, gSlider, bSlider;
    static JLabel rLabel, gLabel, bLabel;

    public static void main(String[] args)
    {
       JFrame win = new JFrame("Color Chooser");
       win.setDefaultCloseOperation(3);
       win.add(new SlideColorPanel());
       win.pack();
       win.setResizable(false);
       win.setVisible(true);
    }

    static class SlideColorPanel extends JPanel
    {
        public SlideColorPanel()
        {
            rSlider = new JSlider(JSlider.HORIZONTAL, 0, 255, 0);
            rSlider.setMajorTickSpacing(50);
            rSlider.setMinorTickSpacing(10);
            rSlider.setPaintTicks(true);
            rSlider.setPaintLabels(true);
            rSlider.setAlignmentX(LEFT_ALIGNMENT);

            gSlider = new JSlider(JSlider.HORIZONTAL, 0, 255, 0);
            gSlider.setMajorTickSpacing(50);
            gSlider.setMinorTickSpacing(10);
            gSlider.setPaintTicks(true);
            gSlider.setPaintLabels(true);
            gSlider.setAlignmentX(LEFT_ALIGNMENT);

            bSlider = new JSlider(JSlider.HORIZONTAL, 0, 255, 0);
            bSlider.setMajorTickSpacing(50);
            bSlider.setMinorTickSpacing(10);
            bSlider.setPaintTicks(true);
            bSlider.setPaintLabels(true);
            bSlider.setAlignmentX(LEFT_ALIGNMENT);

            SliderListener listener = new SliderListener();

            rSlider.addChangeListener(listener);
            gSlider.addChangeListener(listener);
            bSlider.addChangeListener(listener);

            rLabel = new JLabel("Red: 0");
            rLabel.setAlignmentX(LEFT_ALIGNMENT);
            gLabel = new JLabel("Green: 0");
            gLabel.setAlignmentX(LEFT_ALIGNMENT);
            bLabel = new JLabel("Blue: 0");
            bLabel.setAlignmentX(LEFT_ALIGNMENT);

            controls = new JPanel();

            BoxLayout layout = new BoxLayout(controls, BoxLayout.Y_AXIS);
            controls.setLayout(layout);

            controls.add(rLabel);
            controls.add(rSlider);
            controls.add(Box.createRigidArea(new Dimension(0,20)));

            controls.add(gLabel);
            controls.add(gSlider);
            controls.add(Box.createRigidArea(new Dimension(0,20)));

            controls.add(bLabel);
            controls.add(bSlider);
            controls.add(Box.createRigidArea(new Dimension(0,20)));

            colorPanel = new JPanel();
            colorPanel.setPreferredSize(new Dimension(100,100));
            colorPanel.setBackground(Color.black);

            add(controls);
            add(colorPanel);
        }
    }
    static class SliderListener implements ChangeListener
    {
        private int red, green, blue;

        @Override
        public void stateChanged(ChangeEvent e)
        {
            red = rSlider.getValue();
            green = gSlider.getValue();
            blue = bSlider.getValue();

            rLabel.setText("Red: " + red);
            gLabel.setText("Green: " + green);
            bLabel.setText("Blue: " + blue);

            colorPanel.setBackground(new Color(red, green, blue));
        }

    }
}
4

1 に答える 1

1

以下を使用して、int 値を 16 進値に変換できます。

String hex = Integer.toHexString(...);

個々の値ごとにそれを行うことができます。

または、Color 全体に対して 1 つの 16 進数値だけが必要な場合は、メソッドColorを使用してオブジェクトの int 値を取得する必要があります。getRGB(...)この場合、16 進値にはアルファ値が含まれるため、最初の 2 文字を無視することをお勧めします。

于 2013-11-05T16:17:56.900 に答える