私はSimon Saysスタイルのゲームを作っています。四色の四角形があり、コンピュータがシーケンスを行い、それをコピーして、いくつかの高度な機能を追加する。私が見ている現在の機能は、ユーザーの意志でカラーパネルの実際の色を変更し、それぞれを個別に変更できるようにすることです。実行中のインスタンス変数を編集して別のクラスに更新する
JColorChooserを使用して「カラーパネル」を新しい色に変更するにはどうすればいいですか?
現時点で私はいくつかのクラスに分かれており、コミュニケーションをとるだけで問題なく正しく動作しています。
メインクラス(のみ抜粋):
public class Simonish implements ActionListener, MouseListener {
private ColorPanel colorPanel[] = new ColorPanel[4];
private ScorePanel scorePanel = new ScorePanel();
private Menu menuBar = new Menu();
private JPanel gameBoard = new JPanel();
private Random rand = new Random();
private ArrayList<ColorPanel> compSeq = new ArrayList<ColorPanel>();
private Iterator<ColorPanel> iter;
private JFrame frame = new JFrame();
private boolean playerTurn = false;
private int speed = 500;
public Simonish(Color[] colors){
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel pane = (JPanel)frame.getContentPane();
pane.setLayout(new BorderLayout());
gameBoard.setLayout(new GridLayout(2,2));
gameBoard.setPreferredSize(new Dimension(400,400));
for (int i=0;i<colorPanel.length;i++){
colorPanel[i] = new ColorPanel(colors[i]);
colorPanel[i].addMouseListener(this);
gameBoard.add(colorPanel[i]);
}
scorePanel.addStartListener(this);
frame.setJMenuBar(menuBar);
pane.add(scorePanel, BorderLayout.NORTH);
pane.add(gameBoard, BorderLayout.CENTER);
frame.setLocationRelativeTo(null);
frame.pack();
frame.setVisible(true);
}
マイメニューコード(メニューバーを構築し、アクションを実装):
public class Menu extends JMenuBar {
private JMenuBar menuBar = new JMenuBar();
private JMenu settings = new JMenu("Settings");
private JMenu stats = new JMenu("Stats");
private JMenu help = new JMenu("Help");
private JMenuItem chooseColor = new JMenuItem(new ChooseColorAction("Choose Color"));
private JMenuItem colorMode = new JMenuItem(new ColorModeAction("Color Mode"));
private JMenuItem hScore = new JMenuItem("High Scores");
private JMenuItem history = new JMenuItem("History");
private JMenuItem about = new JMenuItem("About");
private JMenuItem rules = new JMenuItem("Rules");
public Menu(){
this.add(settings);
this.add(stats);
this.add(help);
settings.add(chooseColor);
settings.add(colorMode);
stats.add(hScore);
stats.add(history);
help.add(about);
help.add(rules);
}
}
コードを変更する色を収容するActionクラス:
public class ColorModeAction extends AbstractAction {
public ColorModeAction(String name){
super(name);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
Color[] colors = {Color.CYAN, Color.BLACK, Color.WHITE, Color.GREEN};
//new Simonish(colors);
//JOptionPane.showMessageDialog(null, "Color Mode");
}
}
素早くお返事ありがとうございます!私はそれを得ると思う。私は今夜これを試してみる。 – link270
お寄せください。キーワードを「疎結合」で検索すると、インタフェースを介した通信がより良いアプローチである理由を理解できます。 – rdonuk
もう一度、私は自分の研究と一緒にいくつかの試行錯誤を経て学習するのが好きですが、時々私は立ち往生して何を研究するのか分からないので、指導に感謝します。 – link270