0

これは課題であり、多くのこと(JFrameの拡張など)は物事を行うためのばかげた方法ですが、私はそれらをそのように行わなければなりません。

20色のフォーマットを含む「colours.txt」を入力として受け取るプログラムを作成しています

white FFFFFF
yellow FFFF00

色コンボボックスと終了ボタンを備えたGUIウィンドウが作成されます。コンボボックスには色の単語表現が表示され、クリックすると、GUIウィンドウの背景がその色に変更され、色名ではなく16進値を使用して色が変更されます。これを実現するには、コレクションを使用する必要があります。私はこのすべての資料を読み直していますが、いくつかの分野で本当に迷っています。次のコードを使用して、ウィンドウを作成し、コンボボックスを埋めることができます。必要に応じて、色の名前をコンソールに出力できますが、機能すると思ったコードが機能しません。これはスコープの問題であり、行を記述できるようにこれを設定する方法がわかりません。

frame.setBackground(Color.decode(jcbColour.getSelectedItem().hex));

またはそれに似たもの。

package cmis242fp;

import java.awt.*;
import java.awt.event.*;
import java.io.File;
import java.util.*;
import javax.swing.*;

public class Cmis242fp extends JFrame {
    private JButton jbtExit = new JButton("Exit"); //action button
    private static JComboBox jcbColour = new JComboBox(); //drop down of colors

    public Cmis242fp() {
        JPanel myPanel = new JPanel(new BorderLayout());
        myPanel.add(new JLabel("Select a colour:"));
        myPanel.add(jcbColour, BorderLayout.CENTER);
        myPanel.add(jbtExit, BorderLayout.SOUTH);
        myPanel.setBorder(BorderFactory.createEmptyBorder(100, 100, 100, 100));
        myPanel.setMinimumSize(new Dimension(300,300));
        myPanel.setMaximumSize(new Dimension(700,700));

        jcbColour.setMaximumSize(new Dimension(30,30));
        jcbColour.setMaximumSize(new Dimension(60,60));
        add(myPanel);
        jcbColour.addActionListener(new ComboBoxListener());
        jbtExit.addActionListener(new ButtonListener());
    }

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

    private class ComboBoxListener implements ActionListener {
        public void comboAction(Color color) {
            frame.setBackground(color);
        }
        public void actionPerformed(ActionEvent e) {

            //comboAction(Color.decode(jcbColour.getSelectedItem());

        }
    }

    public static class Colour implements Comparable<Colour> {
        private String name;
        private String hex;
        public Colour(String name, String hex) {
            this.name = name;
            this.hex = hex;
        }
        public String ntoString() {return name;}
        public String htoString() {return hex;}
        @Override
        public int compareTo(Colour colour) {
            return this.name.compareTo(colour.name);
        }
        public String toString(){
            return name;
        }
        public String toHex() {
            return hex;
        }
    }

    public static void loadColours(String fileName) {
        java.util.List<Colour> coloursList = new ArrayList<Colour>();

        Scanner inFile = null;
        try {
            inFile = new Scanner(new File(fileName));
            while (inFile.hasNext()) {
                coloursList.add(new Colour(inFile.next(), inFile.next()));
            }
        }
        catch (Exception other) {
            System.out.println(other);
        }
        finally {
            if (inFile != null) {
                inFile.close();
            }
        }

        for(int x = 0; x < coloursList.size(); x++) {
            jcbColour.addItem(coloursList.get(x));
        }
    }

    public static void main(String[] args) {

        String filename = "colours.txt";
        loadColours(filename);
        Cmis242fp frame = new Cmis242fp();
        frame.setSize(350,350);
        frame.setMinimumSize(new Dimension(300,300));
        frame.setMaximumSize(new Dimension(750,750));
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}
4

2 に答える 2

2

試す

JFrame.getContentPane().setBackground()

また、コンボボックスを静的にする必要はなく、フレームのメソッドに色をロードできます。

于 2012-10-12T17:33:28.437 に答える
1

フレームの背景を設定しても、違いはありません。最も簡単な方法(つまり、コードの多くを変更しない)はmyPanel、クラス変数として設定し、リスナーを次のように変更することです。

private class ComboBoxListener implements ActionListener {
    public void actionPerformed(ActionEvent e) {
        myPanel.setBackground(Color.decode(jcbColour.getSelectedItem().toString()));
    }
}

コンボボックスの項目を選択すると、それに応じて背景が変わりますが、このdecodeメソッドはフォーム内の文字列に対して機能することに注意して#XXXXXXください。この手法を使用する場合は、そのタイプの文字列のみをコンボボックスに挿入する必要があります。 (記号を含む)。

于 2012-10-12T17:38:42.093 に答える