これは課題であり、多くのこと(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);
}
}