Java - JPanel和/或其内容未显示

时间:2014-04-05 18:11:52

标签: java swing user-interface jpanel

目前我正在尝试实施GUI。不幸的是,我只获得了一个带有menuBar的框架。小组及其定义的内容没有出现。

我很感激任何关于为什么小组及其内容没有显示以及我做错了什么的建议(最有可能是initialiseLeftPanel()方法)。

到目前为止我尝试过:

更改了setVisible(true);

的位置

包括一些revalidate();

   public class Codebreakerz {
      private static GameRenderer renderer;

   public static void main(String[] args) {
      renderer = new GameRenderer();
   }




public class GameRenderer extends JFrame {
    private final String TITLE = "Codebreakerz";
    private Image ICON = getToolkit().getImage("res/confused.png");
    private final int WIDTH = 900;
    private final int HEIGHT = 800;
    private final int ROUNDS = 12;
    private final Color BACKGROUND = Color.lightGray;

    private JPanel left;
    private JPanel right;

    private JLabel attemptsLabel;
    private JLabel correctLabel;
    private JLabel rightNumbLabel;
    private JLabel[] roundLabels;

    public GameRenderer() {
        initialiseWindow();
        initialiseMenu()
        initialiseLabels(); 
        initialiseLeftPanel();          
}

private void initialiseWindow() {
    setTitle(TITLE);
    setIconImage(ICON);
    setSize(WIDTH, HEIGHT);
    setLocationRelativeTo(null);
    setResizable(false);
    setLayout(null);
    setVisible(true);
}

private void initialiseMenu() {
    JMenuBar menuBar = new JMenuBar();
    JMenu file = new JMenu("Menu");

    JMenuItem newGame = new JMenuItem("Neues Spiel");
    JMenuItem close = new JMenuItem("Schließen");

    file.add(newGame);
    file.add(close);
    menuBar.add(file);

    setJMenuBar(menuBar);
}

private void initialiseLabels() {
    attemptsLabel = new JLabel("0");
    correctLabel = new JLabel("0");
    rightNumbLabel = new JLabel("0");
    roundLabels = new JLabel[ROUNDS];

    for(int i=0; i<ROUNDS; i++) {
        roundLabels[i] = new JLabel();
    }   
}


private void initialiseLeftPanel() {
    left = new JPanel();
    left.setLayout(null); // Tried other stuff aswell   

    JLabel heading = new JLabel("Codebreakerz");
    JLabel tryNr = new JLabel("Anzahl Versuche: ");
    JLabel correct = new JLabel("Richtig: ");
    JLabel correctNumb = new JLabel("Richtige Nummer an falscher Stelle: ");

    left.add(heading);
    left.add(tryNr);
    left.add(correct);
    left.add(correctNumb);

    add(left);
}
}

1 个答案:

答案 0 :(得分:0)

如果您在方法left.setLayout(null);initialiseLeftPanel()方法setLayout(null);中压制行initialiseWindow(),它就会有效。

如果要显示面板,则必须拥有布局。默认情况下,它使用FlowLayout,但在此您将其替换为null。