java - JFrame 上的所有组件均未显示

标签 java swing

我正在创建一个刽子手游戏,想要在框架上有 3 个不同的组件,绞刑架的图片,试图猜测的单词以及字母的按钮,当我尝试将这些组件添加到 JFrame 上时也添加在我想要的位置,但该单词显示在左侧,而 HangmanGallows(扩展 JPanel)甚至没有显示,我如何使 HangmanGallows 和单词在绝对中心并排显示?

public void createGUI() {
    frame = new JFrame("Hangman");
    frame.setSize(500, 500);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
    selectedWord = new WordBank().getWord(); // initializes 'selectedWord' to a random word selected from WordBank class
    System.out.println(selectedWord);
    displayWord();
    displayCharacterChoices();
} // end method

public void displayWord() {
    String word = "";
    for (int i = 0; i < selectedWord.length(); i++) {
        word += "_  ";
    } // end for loop
    HangmanGallows pic = new HangmanGallows();
    JLabel actualWord = new JLabel(word);
    actualWord.setFont(new Font(Font.DIALOG, Font.BOLD, 40));

    frame.getContentPane().add(BorderLayout.EAST, pic);
    frame.getContentPane().add(BorderLayout.CENTER, actualWord);
} // end method

public void displayCharacterChoices() {
    String[] array = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"};
    charactersPanel = new JPanel();
    CharacterButtonListener but = new CharacterButtonListener();
    JPanel panelOne = new JPanel();
    JPanel panelTwo = new JPanel();
    JButton temp;

    for (int i = 0; i < array.length / 2; i++) {
        temp = new JButton(array[i]);
        temp.addActionListener(but);
        temp.setText(array[i]);
        panelOne.add(temp);

    } // end for loop
    for (int i = array.length / 2; i < array.length; i++) {
        temp = new JButton(array[i]);
        temp.addActionListener(but);
        temp.setText(array[i]);
        panelTwo.add(temp);
    } // end for loop

    charactersPanel.setLayout(new BoxLayout(charactersPanel, BoxLayout.Y_AXIS));
    charactersPanel.add(panelOne);
    charactersPanel.add(panelTwo);
    frame.add(BorderLayout.SOUTH, charactersPanel);
} // end method    

最佳答案

构建 UI 后调用 setVisible(true)

例如...

public void createGUI() {
    frame = new JFrame("Hangman");
    frame.setSize(500, 500);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    //frame.setVisible(true);
    selectedWord = new WordBank().getWord(); // initializes 'selectedWord' to a random word selected from WordBank class
    System.out.println(selectedWord);
    displayWord();
    displayCharacterChoices();
    frame.setVisible(true);
} // end method

您可能还会发现 frame.packframe.setLocationByPlatform(true) 的一些用途

关于java - JFrame 上的所有组件均未显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23691210/

相关文章:

Java代码从四元数获取绕轴的旋转角度

java - 将 JScrollPane 添加到 JTable 组件

java - JPA CriteriaBuilder 获取具有条件的列表实体

java - 将 `Thread.yield()` 插入同步函数时会发生什么

java - 文件遍历不返回绝对路径,仅返回文件名

java - 将 JTable 添加到 JScrollPane

java - 如何从应用程序服务器(EJB)通知(或发送消息) Swing 客户端?

java - 创建一个优于其他 JFrame 的 JFrame

java - 如何在 Java 8 的 Method_reference 中为用户定义的接口(interface)和方法传递参数

java - java中mod的语法是什么