Java 测试设置向导出现错误

Java 测试设置向导出现错误,java,swing,colors,compiler-errors,jlist,Java,Swing,Colors,Compiler Errors,Jlist,我想制作一个安装向导,它将要求您输入寡妇的背景色。此外,我还需要一个浏览按钮,用于保存IconImage类型的变量。我得到了这段代码的编译错误。请帮忙!以下是开始代码: import java.awt.color.*; import java.awt.*; import javax.swing.*; import java.awt.event.*; import javax.swing.event.*; public class Setup { private static Strin

我想制作一个安装向导,它将要求您输入寡妇的背景色。此外,我还需要一个浏览按钮,用于保存IconImage类型的变量。我得到了这段代码的编译错误。请帮忙!以下是开始代码:

import java.awt.color.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.event.*;
public class Setup {
     private static String colorSelected;
    public static void main(String[] args) {
        final JFrame f = new JFrame("Test Setup wizard");
        Container a = f.getContentPane();
        a.setBackground(Color.white);
        a.setLayout(new  FlowLayout());
        JLabel question1 = new JLabel("What would you like the background color to be?");
        JButton Next = new JButton("Next");
        final String Colors = new String[]{"black", "blue", "cyan", "darkGray", "gray", "green", "lightGray", "magenta", "orange", "pink", "red", "white", "yellow"};
        final JList colors = new JList(Colors);
        colors.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        colors.setLayoutOrientation(JList.VERTICAL);
        JScrollPane listScroller = new JScrollPane(colors);
        colors.addListSelectionListener(new ListSelectionListener() {
                public void valueChanged(ListSelectionEvent e) {
                    int index = e.getFirstIndex();
                    colorSelected = Colors[index];
                    }
                });
        f.add(question1);
        f.add(colors);
        f.add(Next);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setSize(500,500);
        f.setVisible(true);
        final ImageIcon img = new ImageIcon("HardDisk.jpg");
        f.setIconImage(img.getImage());
        Next.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent Ev) {
                    final Color[] Selected = new Color[1];
                    if (colorSelected .equals("black")) {
                        Selected[0] = new Color(0,0,0);
                    }
                    else if (colorSelected .equals("blue")) {
                        Selected[0] = new Color(0,0,255);
                    }
                    else if (colorSelected .equals("cyan")) {
                        Selected[0] = new Color(0,225,225);
                    }
                    else if (colorSelected .equals("darkGray")) {
                        Selected[0] = new Color(169,169,169);
                    }
                    else if (colorSelected .equals("gray")) {
                        Selected[0] = new Color(128,128,128);
                    }
                    else if (colorSelected .equals("green")) {
                        Selected[0] = new Color(0,255,0);
                    }
                    else if (colorSelected .equals("lightGray")) {
                        Selected[0] = new Color(211,211,211);
                    }
                    else if (colorSelected .equals("magenta")) {
                        Selected[0] = new Color(255,0,255);
                    }
                    else if (colorSelected .equals("orange")) {
                        Selected[0] = new Color(255,165,0);
                    }
                    else if (colorSelected .equals("pink")) {
                        Selected[0] = new Color(255,20,147);
                    }
                    else if (colorSelected .equals("red")) {
                        Selected[0] = new Color(255,0,0);
                    }
                    else if (colorSelected .equals("white")) {
                        Selected[0] = new Color(255,255,255);
                    }
                    else if (colorSelected .equals("yellow")) {
                        Selected[0] = new Color(255,255,0);
                    }
                f.dispose();
                JLabel complete = new JLabel("You are now complete.");
                JFrame f = new JFrame("Complete");
                Container a = f.getContentPane();
                a.setBackground(Selected[0]);
                f.add(complete);
                f.setSize(500,500);
                f.setVisible(true);
                f.setIconImage(img.getImage());
            }
            });
    }
}
错误是:

Setup.java:15: error: incompatible types
                final String Colors = new String[]{"black", "blue", "cyan", "darkGray", "gray", "green", "lightGray", "magenta", "orange", "pink", "red", "white", "yellow"};
                                      ^
  required: String
  found:    String[]
Setup.java:16: error: no suitable constructor found for JList(String)
                final JList colors = new JList(Colors);
                                     ^
    constructor JList.JList() is not applicable
      (actual and formal argument lists differ in length)
    constructor JList.JList(Vector) is not applicable
      (actual argument String cannot be converted to Vector by method invocation conversion)
    constructor JList.JList(Object[]) is not applicable
      (actual argument String cannot be converted to Object[] by method invocation conversion)
    constructor JList.JList(ListModel) is not applicable
      (actual argument String cannot be converted to ListModel by method invocation conversion)
Setup.java:23: error: array required, but String found
                        colorSelected = Colors[index];
                                              ^
3 errors
欢迎任何帮助/新代码! 谢谢
顺便说一句,JList可以由一组字符串组成。我不明白!请帮忙

我不认为
Color
是一个枚举;它有一堆静态变量,但没有定义为枚举

也就是说,给给定的类添加更多的值通常是个坏主意。最好的选择是实例化
Color
变量,然后将其指定为一种现有颜色或使用
Color(int r,int g,int b)
构造函数,如下所示:

Color purple = new Color((139, 0, 139);
guiObject.setBackground(purple);

如果您必须使用
颜色。//我的变量
格式,只需创建一个新类,比如
公共类CustomColor extends Color
,然后根据您的心意进行调整。

我不认为
颜色
是枚举;它有一堆静态变量,但没有定义为枚举

也就是说,给给定的类添加更多的值通常是个坏主意。最好的选择是实例化
Color
变量,然后将其指定为一种现有颜色或使用
Color(int r,int g,int b)
构造函数,如下所示:

Color purple = new Color((139, 0, 139);
guiObject.setBackground(purple);

如果你必须有一个
颜色。//我的变量
格式,只需创建一个新类,比如
公共类CustomColor extends Color
,然后根据你的心意进行调整。

你可以试试这段代码,它会在每次单击“颜色”时侦听,并将颜色保存到“colorSelected”。您可能需要对它进行一些调整,因为它被调用了两次,因为单击是两个事件。无论如何,希望它能满足您的要求:

import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

public class Setup {

    private static String colorSelected;

    public static void main(String[] args) {
        JFrame f = new JFrame("Test Setup wizard");
        JLabel question1 = new JLabel("What would you like the background color to be?");
        final String Colors[] = new String[]{"black", "blue", "cyan", "darkGray", "gray", "green", "lightGray", "magenta", "orange", "pink", "red", "white", "yellow"};
        JList colors = new JList(Colors);
        colors.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        colors.setLayoutOrientation(JList.VERTICAL);
        colors.setVisibleRowCount(-5);
        colors.addListSelectionListener(new ListSelectionListener() {
            public void valueChanged(ListSelectionEvent e) {
                int index = e.getFirstIndex();
                colorSelected = Colors[index];
                System.out.println(colorSelected);
            }
        });

        JScrollPane listScroller = new JScrollPane(colors);
        f.add(colors);
        f.setSize(500, 500);
        f.setVisible(true);
    }
}

此外,我认为大多数人都会混淆“Colors”是一个枚举,因为它是大写的。颜色只是一个字符串数组。惯例是使用camelCase对象名称,因此“colors”是一个更好的名称,您可能应该将JList“colors”重命名为“JList”

您可以尝试一下此代码,它会在每次单击“颜色”时侦听,并将颜色保存到“colorSelected”。您可能需要对它进行一些调整,因为它被调用了两次,因为单击是两个事件。无论如何,希望它能满足您的要求:

import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

public class Setup {

    private static String colorSelected;

    public static void main(String[] args) {
        JFrame f = new JFrame("Test Setup wizard");
        JLabel question1 = new JLabel("What would you like the background color to be?");
        final String Colors[] = new String[]{"black", "blue", "cyan", "darkGray", "gray", "green", "lightGray", "magenta", "orange", "pink", "red", "white", "yellow"};
        JList colors = new JList(Colors);
        colors.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        colors.setLayoutOrientation(JList.VERTICAL);
        colors.setVisibleRowCount(-5);
        colors.addListSelectionListener(new ListSelectionListener() {
            public void valueChanged(ListSelectionEvent e) {
                int index = e.getFirstIndex();
                colorSelected = Colors[index];
                System.out.println(colorSelected);
            }
        });

        JScrollPane listScroller = new JScrollPane(colors);
        f.add(colors);
        f.setSize(500, 500);
        f.setVisible(true);
    }
}

此外,我认为大多数人都会混淆“Colors”是一个枚举,因为它是大写的。颜色只是一个字符串数组。惯例是使用camelCase对象名称,因此“colors”是一个更好的名称,您可能应该将JList“colors”重命名为“JList”

Color c=Color.RED
(Color不是enum;它是一个包含一些静态公共数据成员的类。)另请参见
enum Hue
,参见。
Color c=Color.RED
(Color不是enum;它是一个包含一些静态公共数据成员的类。)另请参见
enum Hue
,我不需要它,但我认为这是一个好主意。谢谢我不需要,但我认为这是个好主意。谢谢