简体   繁体   English

测试设置向导出错

[英]Errors with a test setup wizard

I want to make a setup wizard that will ask for the background color of your widow. 我想制作一个安装向导,询问您寡妇的背景颜色。 Also, I want a browse button that saves a variable of type IconImage. 另外,我想要一个浏览按钮来保存一个IconImage类型的变量。 I am getting compile errors for this code. 我正在为此代码编译错误。 Please help! 请帮忙! Here is the beginning code: 这是开始代码:

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());
            }
            });
    }
}

And the errors are: 错误是:

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

Any help/new code appreciated! 任何帮助/新代码表示赞赏! Thanks By the way, a JList can be made with an array of Strings. 谢谢,顺便说一句,JList可以用字符串数组组成。 I don't understand! 我不明白! Please help! 请帮忙!

You can give this code a try, it listens every time a "color" is clicked and saves the color to "colorSelected". 您可以尝试一下此代码,每次单击“颜色”时它都会侦听并将颜色保存到“ colorSelected”。 You probably need to tweak it a bit since it's invoked twice since a click is two events. 您可能需要对它进行一些调整,因为单击是两个事件,因此它被调用了两次。 Anyway, hopefully it accomplishes the requirement you asked: 无论如何,希望它能够满足您的要求:

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);
    }
}

Also, I think most people are getting confused that "Colors" is an enum because it's uppercase. 另外,我认为大多数人都对“颜色”是一个枚举感到困惑,因为它是大写的。 Colors is just a String array. 颜色只是一个String数组。 The convention is to camelCase object names, so "colors" would've been a preferable name and you probably should rename your JList "colors" to just being "jlist" perhaps. 约定是使用camelCase对象名称,因此“ colors”将是更可取的名称,您可能应该将JList“ colors”重命名为“ jlist”。

I don't think Color is an enum; 我不认为Color是一个枚举。 it has a bunch of static variables but it's not defined as an enum. 它有很多静态变量,但是没有定义为枚举。

That being said, adding more values to a given class is generally a bad idea. 话虽这么说,向给定的类添加更多的值通常不是一个好主意。 The best option would be to instantialize a Color variable, and then assign it either one of the existing colors or use the Color(int r, int g, int b) constructor, like this: 最好的选择是实例化Color变量,然后为它分配现有颜色之一,或使用Color(int r, int g, int b)构造函数,如下所示:

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

If you must have a Color.//my variable format, just create a new class, say public class CustomColor extends Color and then tweak to your heart's content. 如果必须具有Color.//my variable格式,则只需创建一个新类,说public class CustomColor extends Color ,然后调整您的内心内容即可。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM