2015-12-23 3 views
1

Я создал базовый интерфейс для своей игры в кости. Но мои панели не отображаются в JFrame. Пожалуйста, помогите мне исправить это. Я новичок в Java Swing.JPanel не отображается на JFrame

package View; 

import java.awt.BorderLayout; 
import java.awt.Container; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import javax.swing.JButton; 
import javax.swing.JCheckBox; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.SwingUtilities; 

/** 
* 
* @author Akila 
*/ 
public class MainUi extends JFrame { 
    public MainUi(){ 
     initComponents(); 
    } 

    public void initComponents() { 
     setTitle("Dice Game"); 
     setVisible(true); 
     setSize(500, 400); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setResizable(true); 
     Container c = getContentPane(); 

//  *******First Row Components******* 
     JPanel firstRow = new JPanel(); 

     JLabel pc = new JLabel("PC Score"); 
     JLabel user = new JLabel("User Score"); 
     JLabel pcScore = new JLabel(); 
     JLabel userScore = new JLabel(); 


//  *******Second Row Components******* 
     JPanel secondRow = new JPanel(); 

     JLabel pcFirstDice = new JLabel(); 
     JLabel pcSecondDice = new JLabel(); 
     JLabel pcThirdDice = new JLabel(); 
     JLabel pcFourthDice = new JLabel(); 
     JLabel pcFifthDice = new JLabel(); 

     JCheckBox checkPcFirstDice = new JCheckBox(); 
     JCheckBox checkPcSecondDice = new JCheckBox(); 
     JCheckBox checkPcThirdDice = new JCheckBox(); 
     JCheckBox checkPcFourthDice = new JCheckBox(); 
     JCheckBox checkPcFifthDice = new JCheckBox(); 

//  *******Third Row Components******* 
     JPanel thirdRow = new JPanel(); 

     JLabel userFirstDice = new JLabel(); 
     JLabel userSecondDice = new JLabel(); 
     JLabel userThirdDice = new JLabel(); 
     JLabel userFourthDice = new JLabel(); 
     JLabel userFifthDice = new JLabel(); 

     JCheckBox checkUserFirstDice = new JCheckBox(); 
     JCheckBox checkUserSecondDice = new JCheckBox(); 
     JCheckBox checkUserThirdDice = new JCheckBox(); 
     JCheckBox checkUserFourthDice = new JCheckBox(); 
     JCheckBox checkUserFifthDice = new JCheckBox(); 

//  *******Fourth Row Components******* 
     JPanel fourthRow = new JPanel(); 

     JButton throwDice = new JButton("Throw"); 
     JButton updateScore = new JButton("Update Score"); 

//  *******First Row GridBag Layout******* 
     firstRow.setSize(400, 100); 
     firstRow.setLayout(new GridBagLayout()); 
     GridBagConstraints first = new GridBagConstraints(); 
     first.weightx = 1; 
     first.weighty = 0.25; 

//  Add First Row Components 
     first.gridx = 1; 
     first.gridy = 0; 
     firstRow.add(pcScore,first); 
     c.add(firstRow,BorderLayout.NORTH); 
    } 
} 
+0

Откуда вы знаете? Вы добавляете пустую 'JPanel', которая содержит пустую' JLabel' для фрейма? – MadProgrammer

+0

Вы также должны называть 'setVisible' ПОСЛЕ того, как вы установили базовый интерфейс, в противном случае вам нужно будет использовать' revalidate' и 'repaint' – MadProgrammer

ответ

3

Проблема заключается в том что вы не добавление каких-либо компонентов в JPanel вы просто создать компоненты и добавить пустую панель Container.

Вот фрагмент кода пример добавления первых компонентов строки в JPanel:

//  *******First Row Components******* 
    JPanel firstRow = new JPanel(); 

    JLabel pc = new JLabel("PC Score"); 
    JLabel user = new JLabel("User Score"); 
    JLabel pcScore = new JLabel(); 
    JLabel userScore = new JLabel(); 

    firstRow.add(pc); 
    firstRow.add(user); 
    firstRow.add(pcScore); 
    firstRow.add(userScore); 

Вы также можете добавить все остальные строки панели в Container, так как вы только добавляя первый ряд к нему.

2

У вас есть две проблемы, над здесь:

  1. Вы забыли добавить свои строки в ваш кадр:

    c.add(secondRow); 
        c.add(thirdRow); 
        c.add(fourthRow) 
        c.add(firstRow); 
    
  2. Вы забыли добавить свой контент для ваших строк (например, для строки одной):

    //  *******First Row Components******* 
    JPanel firstRow = new JPanel(); 
    
    JLabel pc = new JLabel("PC Score"); 
    JLabel user = new JLabel("User Score"); 
    JLabel pcScore = new JLabel(); 
    JLabel userScore = new JLabel(); 
    
    firstRow.add(pc); 
    firstRow.add(user); 
    firstRow.add(pcScore); 
    firstRow.add(userScore); 
    

Надеюсь, это поможет!