如何更改jcombobox中的颜色格式?

rta7y2nd  于 2021-09-13  发布在  Java
关注(0)|答案(1)|浏览(368)

我正在培训gui,并且面临字符串格式问题。不知道如何以用户可读的格式显示列表中的颜色?

public static void main(String[] args) {

        JFrame jframe = getFrame();

        jframe.setTitle("Background color");

        Toolkit toolkit = Toolkit.getDefaultToolkit();

        Dimension dimension = toolkit.getScreenSize();

        jframe.setBounds(dimension.width/2-250, dimension.height/2-150, 500, 300);

        JPanel jpanel = new JPanel();

        JButton setColor = new JButton("Set Color");

        Color colors[] = {Color.red, Color.green, Color.blue, Color.black};

        JComboBox<Color> selector = new JComboBox<>(colors);

        setColor.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                jpanel.setBackground((Color)selector.getSelectedItem());
            }
        });

        jpanel.add(selector);

        jpanel.add(setColor);

        jframe.add(jpanel);

      }

      public static JFrame getFrame() {
        JFrame jframe = new JFrame();
        jframe.setVisible(true);
        jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        return jframe;
      }
  }

这里是我的输出:
因此,我希望显示颜色的名称,而不是java.awt.color[…]

提前谢谢!

but5z9lq

but5z9lq1#

默认情况下, JComboBox 显示由返回的值 toString 方法的列表中的对象。自从你 JComboBox 包含 Color 对象,则可以看到方法返回的值 toString 一流的 java.awt.Color .
如果要显示颜色名称,则需要创建一个自定义类,该类将颜色名称存储为 StringColor 对象然后,您需要覆盖 toString 方法只返回颜色的名称。在下面的代码中,自定义类被命名为 NamedColor .

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Toolkit;

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

public class ColorSet {

    public static void main(String[] args) {
        JFrame jframe = new JFrame("Background color");
        jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Toolkit toolkit = Toolkit.getDefaultToolkit();
        Dimension dimension = toolkit.getScreenSize();
        jframe.setBounds(dimension.width / 2 - 250, dimension.height / 2 - 150, 500, 300);
        JPanel jpanel = new JPanel();
        JButton setColor = new JButton("Set Color");
        NamedColor colors[] = {new NamedColor(Color.red, "RED"),
                               new NamedColor(Color.green, "GREEN"),
                               new NamedColor(Color.blue, "BLUE"),
                               new NamedColor(Color.black, "BLACK")};
        JComboBox<NamedColor> selector = new JComboBox<>(colors);
        setColor.addActionListener(
                  e -> jpanel.setBackground(((NamedColor) selector.getSelectedItem()).getColor()));
        jpanel.add(selector);
        jpanel.add(setColor);
        jframe.add(jpanel);
        jframe.setVisible(true);
    }
}

class NamedColor {
    private Color color;
    private String name;

    public NamedColor(Color color, String name) {
        this.color = color;
        this.name = name;
    }

    public Color getColor() {
        return color;
    }

    public String toString() {
        return name;
    }
}

关于上述代码的注解。
这个 ActionListener 接口是使用lambda表达式实现的
您应该调用方法 setVisible ,当然 JFrame 仅在添加所有组件之后。

相关问题