В программе, которую я пишу, я хочу, чтобы 10 текстовых полей были выровнены по вертикали. Вместо этого я получаю это:Swing GridBagLayout act out
код здесь:
import java.awt.*;
import java.util.Random;
import javax.swing.*;
import java.awt.event.*;
public class Gsb extends JFrame {
JTextField word1;
JTextField word2;
JTextField word3;
JTextField word4;
JTextField word5;
JTextField word6;
JTextField word7;
JTextField word8;
JTextField word9;
JTextField word10;
JButton gofor;
JButton rego;
JTextArea Stuff;
JPanel panel;
JPanel texts;
JPanel buttons;
JButton Quit;
JPanel bigt;
String[] words = new String[20];
static int[] randnums = new int[20];
int i = 0;
public static void main(String[] args) {
new Gsb();
Random Rand = new Random();
int counter = 0;
int rand;
int[] pick = new int[20];
for(int i = 0; i < 20; i++)
{
rand = Rand.nextInt(20) + 1;
if (CheckForDuplicate(pick, rand, counter))
{
pick[i] = rand;
counter++;
}
else
{
i--;
}
}
for(int p = 0; p < 20; p++) {
randnums[p] = pick[p] - 1;
}
}
static boolean CheckForDuplicate(int[] array, int number, int counter)
{
for (int i = 0; i < counter; i++)
{
if (array[i] == number)
{
return false;
}
}
return true;
}
public Gsb() {
Toolkit tk = Toolkit.getDefaultToolkit();
Dimension dim = tk.getScreenSize();
int xPos = (dim.width/2) - (this.getWidth()/2);
int yPos = (dim.height/2) - (this.getHeight()/2);
this.setLocation(xPos, yPos);
GridBagConstraints c = new GridBagConstraints();
GridBagConstraints d = new GridBagConstraints();
this.setSize(500, 500);
this.setTitle("checker");
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
panel = new JPanel();
texts = new JPanel();
buttons = new JPanel();
bigt = new JPanel();
word1 = new JTextField(10);
word2 = new JTextField(10);
word3 = new JTextField(10);
word4 = new JTextField(10);
word5 = new JTextField(10);
word6 = new JTextField(10);
word7 = new JTextField(10);
word8 = new JTextField(10);
word9 = new JTextField(10);
word10 = new JTextField(10);
gofor = new JButton("BONANZA!");
rego = new JButton("Restart");
Stuff = new JTextArea(40, 40);
Quit = new JButton("Exit");
Stuff.setLineWrap(true);
Stuff.setWrapStyleWord(true);
Stuff.setText("welcome to the google search bonanza! first user write 10 random words and press BONANZA!");
JScrollPane useless = new JScrollPane(Stuff, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
panel.setLayout(new GridBagLayout());
texts.setLayout(new GridBagLayout());
buttons.setLayout(new GridBagLayout());
bigt.setLayout(new GridBagLayout());
c.fill = GridBagConstraints.CENTER;
d.fill = GridBagConstraints.RELATIVE;
d.gridx = 0;
d.gridy = 0;
texts.add(word1, d);
d.gridx = 0;
d.gridy = 1;
texts.add(word2, d);
d.gridx = 0;
d.gridy = 2;
texts.add(word3, d);
d.gridx = 0;
d.gridy = 3;
texts.add(word4, d);
d.gridx = 0;
d.gridy = 4;
texts.add(word5, d);
d.gridx = 0;
d.gridy = 5;
texts.add(word6, d);
d.gridx = 0;
d.gridy = 6;
texts.add(word7, d);
d.gridx = 0;
d.gridy = 7;
texts.add(word8, d);
d.gridx = 0;
d.gridy = 8;
texts.add(word9, d);
d.gridx = 0;
d.gridy = 9;
texts.add(word10);
c.gridx = 10;
c.gridy = 0;
buttons.add(gofor,c);
c.gridx = 9;
c.gridy = 0;
buttons.add(Quit,c);
c.gridx = 8;
c.gridy = 0;
buttons.add(rego ,c);
Bonanza bonanzer = new Bonanza();
Bonanzatwo bon2 = new Bonanzatwo();
Reset Reseter = new Reset();
Exit Exiter = new Exit();
rego.addActionListener(Reseter);
gofor.addActionListener(bonanzer);
gofor.addActionListener(bon2);
Quit.addActionListener(Exiter);
bigt.add(Stuff);
c.gridheight = 20;
c.gridx = 0;
c.gridy = 0;
panel.add(texts, c);
panel.add(buttons);
panel.add(bigt);
panel.add(useless);
this.add(panel);
this.setExtendedState(JFrame.MAXIMIZED_BOTH);
this.setUndecorated(true);
this.setVisible(true);
this.setTitle("The Google search bonanza");
}
в основном, если это не было ясно, им будет что-то вроде этого:
1) Для лучшей помощи рано, оставить [MCVE] или [Short, Self Содержащийся, правильный пример] (http://www.sscce.org/). 2) Используйте логическую и согласованную форму отступающих кодовых строк и блоков. Отступы предназначены для того, чтобы поток кода стал проще следовать! 3) Заменить «Toolkit tk = Toolkit.getDefaultToolkit(); .. this.setLocation (xPos, yPos); 'с' this.setLocationRelativeTo (null); 'для того же эффекта. Или лучше. 'this.setLocationByPlatform (true);' .. –
.. 4) Предоставить ASCII-искусство или простой чертеж * предполагаемого * макета GUI при минимальном размере и ** если изменить размер, с большей шириной и высотой. ** ** последний **, чтобы показать, как должно быть назначено дополнительное пространство. –
спасибо, я буду помнить об этом в следующий раз! –