Java 如何显示在我的组合框中选择的颜色
因此,我试图创建一个漂亮的窗口,显示从组合框中选择的颜色。但是我制作了窗口和组合框,因为某些原因我的颜色没有显示出来。有人能帮我吗 同样从我所知道的,我的组合框在我的窗口的顶部。我想让它显示在下面的颜色Java 如何显示在我的组合框中选择的颜色,java,Java,因此,我试图创建一个漂亮的窗口,显示从组合框中选择的颜色。但是我制作了窗口和组合框,因为某些原因我的颜色没有显示出来。有人能帮我吗 同样从我所知道的,我的组合框在我的窗口的顶部。我想让它显示在下面的颜色 import java.awt.*; import java.awt.event.*; import javax.swing.JFrame; class Colors extends JFrame implements ItemListener { Choice chooseColor
import java.awt.*;
import java.awt.event.*;
import javax.swing.JFrame;
class Colors extends JFrame implements ItemListener
{
Choice chooseColor = new Choice();
Label lblQts = new Label("Choose color you like : ");
public Colors(String title)
{
super(title);
setLayout(new FlowLayout());
chooseColor.addItem("red");
chooseColor.addItem("green");
chooseColor.addItem("blue");
add(lblQts);
add(chooseColor);
chooseColor.addItemListener(this);
}
public void itemStateChanged(ItemEvent e)
{
String c;
Color color;
c = chooseColor.getSelectedItem();
color=Color.getColor(c);
setBackground(color);
}
}
public static void main(String[] args)
{
Colors objColor = new Colors("Color Chooser");
objColor.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
objColor.setSize(400,400);
objColor.setVisible(true);
}
您需要设置contentPane的背景,而不是
JFrame
background。
然后,您不能使用Color.getColor
检索本例中的颜色对象。看
这是工作代码:
import java.awt.Choice;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Label;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.lang.reflect.Field;
import javax.swing.JFrame;
public class Colors extends JFrame implements ItemListener
{
Choice chooseColor = new Choice();
Label lblQts = new Label("Choose color you like : ");
public Colors (String title) {
super(title);
setLayout(new FlowLayout());
chooseColor.addItem("red");
chooseColor.addItem("green");
chooseColor.addItem("blue");
add(lblQts);
add(chooseColor);
chooseColor.addItemListener(this);
}
public void itemStateChanged(ItemEvent e) {
String c;
Color color;
c = chooseColor.getSelectedItem();
try {
Field field = Class.forName("java.awt.Color").getField(c);
color = (Color)field.get(null);
} catch (Exception ex) {
color = null; // Not defined
}
getContentPane().setBackground(color);
}
public static void main(String[] args) {
Colors objColor = new Colors ("Color Chooser");
objColor.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
objColor.setSize(400, 400);
objColor.setVisible(true);
}
}
您需要设置contentPane的背景,而不是
JFrame
background。
然后,您不能使用Color.getColor
检索本例中的颜色对象。看
这是工作代码:
import java.awt.Choice;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Label;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.lang.reflect.Field;
import javax.swing.JFrame;
public class Colors extends JFrame implements ItemListener
{
Choice chooseColor = new Choice();
Label lblQts = new Label("Choose color you like : ");
public Colors (String title) {
super(title);
setLayout(new FlowLayout());
chooseColor.addItem("red");
chooseColor.addItem("green");
chooseColor.addItem("blue");
add(lblQts);
add(chooseColor);
chooseColor.addItemListener(this);
}
public void itemStateChanged(ItemEvent e) {
String c;
Color color;
c = chooseColor.getSelectedItem();
try {
Field field = Class.forName("java.awt.Color").getField(c);
color = (Color)field.get(null);
} catch (Exception ex) {
color = null; // Not defined
}
getContentPane().setBackground(color);
}
public static void main(String[] args) {
Colors objColor = new Colors ("Color Chooser");
objColor.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
objColor.setSize(400, 400);
objColor.setVisible(true);
}
}
让我们假设您真的应该使用Swing API,而不是AWT API(我认为这是一个不错的假设,因为您只是在学习) 您可以执行以下操作 基本上。我有一个自定义的
ListCellRenderer
和ActionListener
的JComboBox
ListCellRenderer
以我想要的方式呈现项目,而ActionListener
侦听器用于更改组合框
选择新项目时,它将根据所选项目更改组合框的背景
这里演示的概念对于理解Swing(以及Java)至关重要
导入java.awt.BorderLayout;
导入java.awt.Color;
导入java.awt.Component;
导入java.awt.EventQueue;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入javax.swing.ComboBoxEditor;
导入javax.swing.DefaultListCellRenderer;
导入javax.swing.JComboBox;
导入javax.swing.JFrame;
导入javax.swing.JList;
导入javax.swing.JPanel;
导入javax.swing.UIManager;
导入javax.swing.UnsupportedLookAndFeelException;
公共类TestCombox08{
公共静态void main(字符串[]args){
新的testcombox08();
}
公共测试组合框08(){
invokeLater(新的Runnable(){
@凌驾
公开募捐{
试一试{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}捕获(ClassNotFoundException ex){
}catch(实例化异常){
}捕获(非法访问例外){
}捕获(无支持的LookandFeelexception ex){
}
JFrame=新JFrame(“测试”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(新的BorderLayout());
frame.add(newtestpane());
frame.pack();
frame.setLocationRelativeTo(空);
frame.setVisible(true);
}
});
}
公共类TestPane扩展了JPanel{
公共测试窗格(){
最终JComboBox cb=新JComboBox();
cb.addItem(新的可选择颜色(“红色”,Color.Red));
cb.addItem(新的可选择颜色(“绿色”,Color.Green));
cb.addItem(新的可选择颜色(“蓝色”,Color.Blue));
cb.setRenderer(新的ColorCellRenderer());
添加(cb);
cb.addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e){
对象值=cb.getSelectedItem();
if(SelectableColor的值实例){
cb.setBackground(((SelectableColor)值).getColor();
}否则{
cb.倒退(零);
}
}
});
cb.setSelectedItem(空);
}
}
公共类可选择颜色{
私有字符串名称;
私人色彩;
公共可选择颜色(字符串名称、颜色){
this.name=名称;
这个颜色=颜色;
}
公共字符串getName(){
返回名称;
}
公共颜色getColor(){
返回颜色;
}
}
公共类ColorCellRenderer扩展了DefaultListCellRenderer{
@凌驾
公共组件getListCellRenderComponent(JList列表、对象值、int索引、布尔isSelected、布尔cellHasFocus){
getListCellRenderComponent(列表、值、索引、isSelected、cellHasFocus);
if(SelectableColor的值实例){
SelectableColor sc=(SelectableColor)值;
如果(!isSelected){
挫折背景(sc.getColor());
set不透明(true);
}
setText(sc.getName());
}
归还这个;
}
}
}
你真的应该熟悉你自己。如果你不明白这一点,那么从基本知识开始让我们假设一下,你真的应该使用Swing API,而不是AWT API(我认为这是一个不错的假设,因为你只是在学习而已) 您可以执行以下操作 基本上。我有一个自定义的
ListCellRenderer
和ActionListener
的JComboBox
ListCellRenderer
以我想要的方式呈现项目,而ActionListener
侦听器用于更改组合框
选择新项目时,它将根据所选项目更改组合框的背景
这里演示的概念对于理解Swing(以及Java)至关重要
导入java.awt.BorderLayout;
导入java.awt.Color;
导入java.awt.Component;
导入java.awt.EventQueue;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入javax.swing.ComboBoxEditor;
导入javax.swing.DefaultListCellRenderer;
导入javax.swing.JCo