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 Добавление
_GridBagLayout (что я пытался избежать) ._ слова людей, которые не могут его использовать. Он очень гибкий и мощный. Тем не менее, это требует немного опыта, чтобы полностью понять его (это примерно так же сложно понять, чем кодирование '
Сделал это путь GridBagLayout там, так как я не мог заставить его работать другим способом. Однако теперь я пытаюсь его стилизовать, и простые вещи перестали работать с myPanel.add (новый JLabel («ENTER PLAYER NAMES», JLabel.CENTER), сетка); То есть. Это больше не сосредотачивает JLabel. Обновленный код выше, чтобы вы могли видеть, что я сделал. –
Добавлен grid.anchor = GridBagConstraints.CENTER; Кажется, что-то связано с JTextFields относительно того, почему вещи не выравниваются идеально в центре, потому что, когда я беру его размер до 1 из 10, все становится ближе к центру. У кого-нибудь есть идеи? –
ответ
Могу ли я предложить вложенные макеты (непроверенные)?
источник
2013-03-23 22:33:12 personak
Только что пошел, добавьте в: JPanel myPanel2 = новый JPanel(); myPanel2.add (новый JLabel («Введите имена игроков»)); myPanel.add (myPanel2); Как раз под инициализацией myPanel. Он помещает ярлык в начало, но по какой-то причине JLabels в цикле for теперь не отображаются на экране, а JTextFields. Думаю, я сделал что-то не так? –
Должно быть три панели: 'topPanel' с' GridLayout' '(2,1)', который 'add' 'labelPanel', а затем' add '' namesTablePanel', который похож на вашу старую панель. – personak
Смежные вопросы