Swing コンポーネント (Boggle タイプのゲーム) を使用して Java で小さなゲームを作ろうとしています。私が現在セットアップしている方法では、基本的にすぐにゲームが開きますが、「チュートリアル」と「プレイ」の 2 つのボタンがあるスタートアップ ウィンドウが必要です。私はすでに機能を持っています(私のチュートリアルボタンは、すべてのものを含む新しいウィンドウを開くだけです)2番目のJFrameを作成し、再生を押したときにそれに切り替える方法がわかりません(または、JFrameを作成し、次に、JButton が押されたときに作成済みのものに切り替えます)。新しい JFrame を同じ場所で開き、古い JFrame を非表示にすることができると思いますが、より簡単な解決策を望んでいました。
また、ゲームの完了時にこれを行い、自動的に小さな統計ページに再び切り替えたいと考えています。そのため、情報をいただければ幸いです。
これは、皆さんが私のコードを見たい場合に備えて、これまでのところ持っているものです (Enter キーを接続して userWord を送信し、他のクラスで検証およびスコアリングするか、TileGrid にタイル オブジェクトを入力するか、またはタイマー....しかし、それはすべて後で来るでしょう!)
public class Game implements Runnable {
public void run(){
final JFrame frame = new JFrame("Boggle");
frame.setLocation(500,200);
// Input - holds typing box
final JLetterField typingArea = new JLetterField(1);
typingArea.setFocusTraversalKeysEnabled(false);
typingArea.setEditable(true);
typingArea.setFocusable(true);
typingArea.requestFocusInWindow(); //also this request isn't being granted..
//if anyone could explain why i would love you
// I want the focus on the TextField on startup
frame.add(typingArea, BorderLayout.SOUTH);
typingArea.addKeyListener(new KeyAdapter() {
public void keyPressed (KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ENTER) { // enter key is pressed
String userWord = typingArea.getText().toLowerCase();
typingArea.setText("");
}
}
});
final JLabel status = new JLabel("Running...");
// Main playing area
GridLayout tileGrid = new GridLayout(4,4);
final JPanel grid = new JPanel(tileGrid);
frame.add(grid, BorderLayout.CENTER);
// Reset button
final JPanel control_panel = new JPanel();
frame.add(control_panel, BorderLayout.NORTH);
final ImageIcon img = new ImageIcon("Instructions.png", "My Instructions...");
final JButton info = new JButton("Help");
info.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
final JFrame infoFrame = new JFrame("Tutorial");
infoFrame.setLocation(500,50);
JLabel tutorialImg = new JLabel(img);
int w = img.getIconWidth();
int h = img.getIconHeight();
infoFrame.setSize(w, h);
infoFrame.add(tutorialImg);
infoFrame.setVisible(true);
}
});
control_panel.add(info);
// Put the frame on the screen
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
public static void main(String[] args){
SwingUtilities.invokeLater(new Game());
}
}