1

私は、色と色の 16 進コードをテキスト ファイルからマップに読み込む必要があるプロジェクトに取り組んでいます。TreeMap を作成し、画面に適切に保存して印刷しましたが、データをコンボ ボックスに送信する方法がわかりません。これまでの私のコードは次のとおりです...

public class Project extends JFrame{

    JComboBox CBColor = new JComboBox(new String[]
    {"", "AQUA", "BLACK", "BLUE", "BROWN", "FUCHSIA", "GRAY",
    "GREEN", "INDIGO", "LIME", "MAROON", "NAVY", "ORANGE",
    "PINK", "PURPLE", "RED", "SIENNA", "TAN", "TEAL", "WHITE", "YELLOW"});
    JTextArea TAText = new JTextArea(5, 25);
    JButton BApply = new JButton("Apply");
    JButton BExit = new JButton("Exit");

    public Project() {
        JPanel SelectionPanel = new JPanel(new BorderLayout());
        SelectionPanel.add(CBColor, BorderLayout.NORTH);
        SelectionPanel.add(TAText, BorderLayout.CENTER);
        JPanel ApplyPanel = new JPanel(new FlowLayout(FlowLayout.CENTER, 10, 10));
        ApplyPanel.add(BApply);
        ApplyPanel.add(BExit);
        add(SelectionPanel, BorderLayout.NORTH);
        add(ApplyPanel, BorderLayout.SOUTH);
        BApply.addActionListener(new ButtonListener());
        BExit.addActionListener(new ExitButtonListener());
    }

    private class ButtonListener implements ActionListener {
            public void actionPerformed(ActionEvent e) {
                String BGColor = "";
                if (CBColor.getSelectedItem() == "AQUA")
                    BGColor = "#00FFFF";
                else if (CBColor.getSelectedItem() == "BLACK")
                    BGColor = "#000000";
                else if (CBColor.getSelectedItem() == "BLUE")
                    BGColor = "#0000FF";
                else if (CBColor.getSelectedItem() == "BROWN")
                    BGColor = "#A52A2A";
                else if (CBColor.getSelectedItem() == "FUCHSIA")
                    BGColor = "#FF00FF";
                else if (CBColor.getSelectedItem() == "GRAY")
                    BGColor = "#BEBEBE";
                else if (CBColor.getSelectedItem() == "GREEN")
                    BGColor = "#008000";
                else if (CBColor.getSelectedItem() == "INDIGO")
                    BGColor = "#4B0082";
                else if (CBColor.getSelectedItem() == "LIME")
                    BGColor = "#00FF00";
                else if (CBColor.getSelectedItem() == "MAROON")
                    BGColor = "#800000";
                else if (CBColor.getSelectedItem() == "NAVY")
                    BGColor = "#000080";
                else if (CBColor.getSelectedItem() == "ORANGE")
                    BGColor = "#FFA500";
                else if (CBColor.getSelectedItem() == "PINK")
                    BGColor = "#FFC0CB";
                else if (CBColor.getSelectedItem() == "PURPLE")
                    BGColor = "#800080";
                else if (CBColor.getSelectedItem() == "RED")
                    BGColor = "#FF0000";
                else if (CBColor.getSelectedItem() == "SIENNA")
                    BGColor = "#A0522D";
                else if (CBColor.getSelectedItem() == "TAN")
                    BGColor = "#D2B48C";
                else if (CBColor.getSelectedItem() == "TEAL")
                    BGColor = "#008080";
                else if (CBColor.getSelectedItem() == "WHITE")
                    BGColor = "#FFFFFF";
                else if (CBColor.getSelectedItem() == "YELLOW")
                    BGColor = "#FFFF00";
                TAText.setBackground(Color.decode(BGColor));
            }
    }

    private class ExitButtonListener implements ActionListener {
            public void actionPerformed(ActionEvent e) {
            System.exit(0);
            }
    }

    public static void main(String[] args) throws Exception {

        Map<String, String> ColorsHex = new TreeMap<String, String>();

        BufferedReader input = new BufferedReader(new FileReader("colors.txt"));
        String line = "";
        while ((line = input.readLine()) != null) {
            String parts[] = line.split(", ");
            ColorsHex.put(parts[0], parts[1]);
        }
        input.close();        
        System.out.println(ColorsHex);
        System.out.print(ColorsHex.keySet());
        System.out.print(ColorsHex.get("RED"));


        Project frame = new Project();
        frame.setTitle("Colors");
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);



    }


}

これはコンパイルして実行しますが、コンボボックスに入力する代わりにインポートされた値を読み取らせ、リスナーに要素を入力する代わりに読み取らせようとしています。

4

1 に答える 1

1

JComboBoxを取るコンストラクタはありませんSet利用可能なコンストラクターの 1 つを使用する必要があります。

アップデート:

1 つの解決策は、最初に既定のコンストラクターを使用しJComboBox()、load を呼び出してファイルから色を読み込んでから、モデルを次のように設定することですJComboBox

protected void loadColors() throws IOException {
   Map<String, String> colorsHexMap = new TreeMap<String, String>();
   BufferedReader input = new BufferedReader(new FileReader("colors.txt"));
   ...

   Set<String> keySet = colorsHexMap.keySet();
   String[] keyArray = keySet.toArray(new String[keySet.size()]);
   ComboBoxModel<String> model = new DefaultComboBoxModel<>(keyArray);
   CBColor.setModel(model);
}

また、TreeMapクラス メンバー変数を作成すると、16 進数の色の選択を 2 行に簡素化できます。

String bgColor = colorsHexMap.get(CBColor.getSelectedItem());
TAText.setBackground(Color.decode(bgColor));
于 2012-10-13T19:42:24.260 に答える