Итак, я начал разрабатывать графический интерфейс TicTacToe в Java & Я застрял.Некоторые проблемы при проектировании графического интерфейса
Вот код, я работаю над
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class gameWindow {
int b;
JFrame frameX;
JPanel panel1, panel2, panel3, panel4;
JLabel[] labelX = new JLabel[10];
JTextField inputter;
JButton input;
JButton exit;
public static void main(String[] args) {
gameWindow xyz = new gameWindow();
xyz.go();
}
public void go() {
frameX = new JFrame();
//frameX.setResizable(false);
LayoutManager lay1 = new BoxLayout(panel1, BoxLayout.X_AXIS);
LayoutManager lay2 = new BoxLayout(panel2, BoxLayout.X_AXIS);
LayoutManager lay3 = new BoxLayout(panel3, BoxLayout.X_AXIS);
panel1 = new JPanel(/*lay1*/);
panel2 = new JPanel(/*lay2*/);
panel3 = new JPanel(/*lay3*/);
panel4 = new JPanel();
//
for (b=1; b<10; b++) {
labelX[b] = new JLabel();
}
//
inputter = new JTextField();
input = new JButton();
exit = new JButton();
frameX.setSize(300,300);
frameX.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frameX.setVisible(true);
//
for(b=1; b<10; b++) {
labelX[b].setForeground(Color.BLUE);
labelX[b].setPreferredSize(new Dimension(50,50));
labelX[b].setText("X");
if (b<4) {
panel1.add(labelX[b]);
} else if(b>3 && b<7) {
panel2.add(labelX[b]);
} else if(b>6) {
panel3.add(labelX[b]);
}
}
//
inputter.setPreferredSize(new Dimension(50,50));
inputter.setText("Enter box number here");
input.setPreferredSize(new Dimension(50,50));
input.setText("Play");
exit.setPreferredSize(new Dimension(50,50));
exit.setText("Exit");
exit.addActionListener(new forExit());
panel4.add(inputter);
panel4.add(input);
panel4.add(exit);
//Adding Panels to the frame
frameX.getContentPane().add(BorderLayout.NORTH, panel1);
frameX.getContentPane().add(BorderLayout.CENTER, panel2);
frameX.getContentPane().add(BorderLayout.SOUTH, panel3);
frameX.getContentPane().add(BorderLayout.EAST, panel4);
}
class forExit implements ActionListener {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
}
}
1) Первая проблема, которую я получаю, что всякий раз, когда я компилирую & запустить этот, ни один компонент не отображается на JFrame. Но тогда, если я максимизирую рамку, появятся все компоненты. Что это?
2) Если я раскомментировать lay1, lay2 & lay3 в объявлении JPanels использования (Layout) конструктор JPanel, я получаю BoxLayout can't be shared
ошибки (выполнения) на кадре не появляется & ничего. В этом случае даже максимизация не помогает.
Что я делаю неправильно & У вас есть лучший способ создать графический интерфейс?
Еще одна проблема заключается в том, что после того, как вы установилиVisible, вам абсолютно не разрешено изменять содержимое вашего фрейма в используемом вами потоке. Технически даже для того, что вы делаете, вы должны использовать invokeLater или что-то, чтобы попасть в поток AWT, прежде чем делать что-либо с фреймом, но я никогда не видел код с ошибкой, если вы его не модифицируете после его реализации (после setVisible (true)), однако Sun сказал, что отказ возможен, и что ВСЕ обновления swing должны быть в awt-потоке. –
Получил это. Спасибо вам обоим. Но все же, что случилось с BoxLayout? – MoonStruckHorrors