Код был пропущен после создания экземпляра JPanel.JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Код был пропущен после создания экземпляра JPanel.

Сообщение Anonymous »

Я делаю копию игры Тетрис и создал игровую панель.
Я пытался поменять порядок tetris.initGamePanel(); и тетрис .initWindow(); в

Код: Выделить всё

 public static void main(String[] args){
Tetris tetris = new Tetris();
tetris.initGamePanel();
tetris.initWindow();//Why the order matters???
//tetris.initGamePanel();
}
и обнаружил, что при первом выполнении tetris.initGamePanel(); программа работала отлично, но при изменении порядка на обратный появлялось пустое окно.
Я попытался отладить код и обнаружил, что остальная часть кода

Код: Выделить всё

public void initGamePanel() {
JPanel game_main = new JPanel();
game_main.setLayout(new GridLayout(game_x,game_y,1,1));
//initialize game panel

for(int i = 0; i < text.length; i++) {
for (int j = 0; j < text[i].length; j++) {
//create a new JTextArea Object that contains parameter i and j
text [i][j] = new JTextArea();
text [i][j].setBackground(Color.white);
text [i][j].addKeyListener(this);
text [i][j].setEditable(false);

if(j == 0 || j == text[i].length-1 || i == text.length-1) {
text [i][j].setBackground(Color.MAGENTA);
data [i][j] = 1;
}

game_main.add(text[i][j]);
}
}

this.setLayout(new BorderLayout());
this.add(game_main,BorderLayout.CENTER);
}
был пропущен после создания экземпляра JPanel в

Код: Выделить всё

public void initGamePanel(){
JPanel game_main = new JPanel();
Но самое странное, казалось, что все работало хорошо (в правильном порядке), несмотря на то, что остальная часть кода даже не была обработана.
Это весь фрагмент кода:

Код: Выделить всё

import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class Tetris extends JFrame implements KeyListener {
private static final int game_x = 24;
private static final int game_y = 12;
public Tetris(){
text = new JTextArea[game_x][game_y];
data = new int[game_x][game_y];
//initGamePanel();
}

JTextArea[][] text;
int [][] data;

public void initWindow(){
this.setSize(400,800);

this.setLocationRelativeTo(null);//align to the center if the component is set to null

this.setVisible(true);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setResizable(false);

this.setTitle("Tetris");
}

public void initGamePanel(){
JPanel game_main = new JPanel();
game_main.setLayout(new GridLayout(game_x,game_y,1,1));
//initialize game panel

for(int i = 0; i < text.length; i++){
for (int j = 0; j < text[i].length; j++){
//create a new JTextArea Object that contains parameter i and j
text [i][j] = new JTextArea();
text [i][j].setBackground(Color.white);
text [i][j].addKeyListener(this);
text [i][j].setEditable(false);

if(j == 0 || j == text[i].length-1 || i == text.length-1 ){
text [i][j].setBackground(Color.MAGENTA);
data [i][j] = 1;
}
game_main.add(text[i][j]);

}

}
this.setLayout(new BorderLayout());
this.add(game_main,BorderLayout.CENTER);
}

@Override
public void keyTyped(KeyEvent e) {

}

@Override
public void keyPressed(KeyEvent e) {

}

@Override
public void keyReleased(KeyEvent e) {

}
public static void main(String[] args){
Tetris tetris = new Tetris();
tetris.initGamePanel();
tetris.initWindow();//Why the order matters???
//tetris.initGamePanel();
}

}
Я предполагаю, что это потому, что конструктор JPanel каким-то образом проработал остальную часть кода, но как?

Подробнее здесь: https://stackoverflow.com/questions/770 ... as-created
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • JPanel внутри JPanel не будет изменять размер с помощью setSize()? Активные менеджеры компоновки также не используются.
    Гость » » в форуме JAVA
    0 Ответы
    24 Просмотры
    Последнее сообщение Гость
  • InnerHTML div пропущен после скрытия div
    Гость » » в форуме CSS
    0 Ответы
    30 Просмотры
    Последнее сообщение Гость
  • InnerHTML div пропущен после скрытия div
    Гость » » в форуме CSS
    0 Ответы
    18 Просмотры
    Последнее сообщение Гость
  • Тестирование контракта Pact — пусть тест завершается неудачно, если пропущен обязательный член перечисления.
    Anonymous » » в форуме C#
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • Кадр рендеринга Unity пропущен, поскольку GfxDevice находится в недопустимом состоянии (устройство потеряно)
    Anonymous » » в форуме C#
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»