测试设置向导出现错误



我想制作一个设置向导,询问寡妇的背景颜色。另外,我想要一个浏览按钮来保存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"时侦听并将颜色保存到"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"是一个枚举,因为它是大写的。Colors只是一个字符串数组。约定是camelBase对象名称,所以"colors"是一个更好的名称,您可能应该将JList的"colors"重命名为"JList"。

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

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

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

如果你必须有一个Color.//my variable格式,只需创建一个新的类,比如public class CustomColor extends Color,然后根据你的喜好进行调整。

最新更新