如何更改 JComboBox 中的颜色格式?
How to change format of color in JComboBox?
我正在训练 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[.....]
提前致谢!
默认情况下,JComboBox
显示由其列表中的对象的 toString
方法编辑的值 return。由于您的 JComboBox
包含 Color
个对象,您会看到 return 由 class java.awt.Color
.
的方法 toString
编辑的值
如果要显示颜色名称,则需要创建一个自定义 class 来存储颜色名称,作为 String
和 Color
对象.然后你需要覆盖自定义 class 的 toString
方法到 return 只是颜色的名称。在下面的代码中,自定义 class 被命名为 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 expression 实现的
- 只有在添加了所有组件后,才应调用 class
JFrame
的方法 setVisible
。
我正在训练 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[.....]
提前致谢!
默认情况下,JComboBox
显示由其列表中的对象的 toString
方法编辑的值 return。由于您的 JComboBox
包含 Color
个对象,您会看到 return 由 class java.awt.Color
.
toString
编辑的值
如果要显示颜色名称,则需要创建一个自定义 class 来存储颜色名称,作为 String
和 Color
对象.然后你需要覆盖自定义 class 的 toString
方法到 return 只是颜色的名称。在下面的代码中,自定义 class 被命名为 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 expression 实现的
- 只有在添加了所有组件后,才应调用 class
JFrame
的方法setVisible
。