2013-03-23 3 views
0
public void testDialog() 
    { 
     JPanel myPanel = new JPanel(new GridBagLayout()); 
     GridBagConstraints grid = new GridBagConstraints(); 
     grid.gridx=0; //Moves Things across 
     grid.gridy=0; //Moves things down 
     myPanel.add(new JLabel("ENTER PLAYER NAMES", JLabel.CENTER), grid); 
     grid.gridy++; 
     JTextField tfNames [] = new JTextField[getNumOfPlayers()]; 
     //Loops through the number of players, initialising and adding a JLabel and JTextField to the JPanel 
     for(int i=0;i < getNumOfPlayers();i++) 
     { 
      grid.gridx = 0; 
      tfNames[i] = new JTextField(10); 
      myPanel.add(new JLabel("Player " + (i+1), JLabel.CENTER), grid); 
      grid.gridx ++; 
      myPanel.add(tfNames[i], grid); 
      grid.gridy+=1; 
     } 

     int result = JOptionPane.showConfirmDialog(null, myPanel, 
       "Initial Dialog", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE, null); 
     //Declaring the array of strings which holds the players name 
     playerNames = new String [getNumOfPlayers()]; 
     //If the 'OK' button is clicked loop through the number of players checking to see if all the JTextFields aren't empty 
     //If they are recall this method otherwise store the input player names in the playerName array. 
     if(result == JOptionPane.OK_OPTION) 
     { 
      for(int i=0;i < getNumOfPlayers();i++) 
      { 
       if(tfNames[i].getText().equals("")) 
       { 
        testDialog(); 
       } 
       else 
       { 
        playerNames[i] = tfNames[i].getText(); 
       } 
      } 
     } 
     //If 'Cancel' button is clicked go back to the previous dialog 
     else if (result == JOptionPane.CANCEL_OPTION) 
     { 
      numPlayersDialog(); 
     } 
     //If 'x' in top right hand corner of the screen is clicked go back to previous dialog 
     else 
     { 
      numPlayersDialog(); 
     } 
    } 

Попытка стилизовать это вызывает у меня некоторую боль сейчас. Необходимо центрировать игроков Player1, Player2, Player3, Player4 JLabels вместе с их JTextFields. Также центрируйте JLabel «Enter Player Names», который, похоже, сломался с изменениями.GUI Layout Добавление

+0

_GridBagLayout (что я пытался избежать) ._ слова людей, которые не могут его использовать. Он очень гибкий и мощный. Тем не менее, это требует немного опыта, чтобы полностью понять его (это примерно так же сложно понять, чем кодирование '

' в HTML). –

+0

Сделал это путь GridBagLayout там, так как я не мог заставить его работать другим способом. Однако теперь я пытаюсь его стилизовать, и простые вещи перестали работать с myPanel.add (новый JLabel («ENTER PLAYER NAMES», JLabel.CENTER), сетка); То есть. Это больше не сосредотачивает JLabel. Обновленный код выше, чтобы вы могли видеть, что я сделал. –

+0

Добавлен grid.anchor = GridBagConstraints.CENTER; Кажется, что-то связано с JTextFields относительно того, почему вещи не выравниваются идеально в центре, потому что, когда я беру его размер до 1 из 10, все становится ближе к центру. У кого-нибудь есть идеи? –

ответ

0

Могу ли я предложить вложенные макеты (непроверенные)?

------------------------- 
| panel with JLabel | 
------------------------- 
| panel with GridLayout | 
------------------------- 
+0

Только что пошел, добавьте в: JPanel myPanel2 = новый JPanel(); myPanel2.add (новый JLabel («Введите имена игроков»)); myPanel.add (myPanel2); Как раз под инициализацией myPanel. Он помещает ярлык в начало, но по какой-то причине JLabels в цикле for теперь не отображаются на экране, а JTextFields. Думаю, я сделал что-то не так? –

+0

Должно быть три панели: 'topPanel' с' GridLayout' '(2,1)', который 'add' 'labelPanel', а затем' add '' namesTablePanel', который похож на вашу старую панель. – personak

 Смежные вопросы

  • Нет связанных вопросов^_^