响应按钮按下更改布局/框架

时间:2013-04-23 08:15:29

标签: java swing jframe

我正在尝试使用Swing组件(Boggle-type游戏)在Java上制作一个小游戏。 我现在设置它的方式,它基本上打开了游戏 - 但我想有一个带有两个按钮的启动窗口 - “教程”和“播放”。我已经有了这个功能(我的Tutorial按钮只是打开一个包含所有内容的新窗口)我只是不确定如何创建第二个JFrame,然后在我按Play时切换到它(或者更确切地说,创建一个JFrame,然后切换到我按下JButton时已创建的那个)。我想我可能会导致新的JFrame在同一个位置打开而旧的JFrame变得不可见 - 但我希望有一个更简单的解决方案。

我也希望在完成游戏时自动切换到一个小的统计页面 - 所以任何信息都将受到赞赏。

这是我到目前为止你想要看到我的代码(我还没有连接到Enter键发送userWord在我的其他类中进行验证和评分,或用tile填充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());
}

}

1 个答案:

答案 0 :(得分:5)