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