У меня проблемы со сборкой пользовательского интерфейса в Java - PullRequest
0 голосов
/ 05 ноября 2018

Я хочу иметь JFrame и добавить на него JPanel "mainPanel", который имеет тот же размер, что и JFrame, а затем я хочу добавить еще одну JPanel "gamePanel" на mainPanel, которая представляет собой GridLayout размером 500x500 пикселей. Но если я переключу цвет игровой панели на синий, все станет синим.

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javafx.scene.layout.Border;

public class GameViewImpl extends JFrame implements GameView {  

    JPanel mainPanel;
    JFrame mainFrame;
    JPanel gamePanel;

    @Override
    public void setController(GameController controller) {
        // TODO Auto-generated method stub
    }

    @Override
    public void show(int c, int r, boolean isHouse, int houseSize, int houseIndex) {
        // TODO Auto-generated method stub      
    }

    public void createAndShowThread() {                 
        mainFrame = new JFrame();
        mainFrame.setSize(1000,500);
        mainPanel = new JPanel(new BorderLayout());
        mainFrame.setVisible(true);
        mainPanel.setSize(1000,500);
        mainFrame.add(mainPanel);
        mainFrame.setResizable(false);
        gamePanel = new JPanel(new GridLayout(10,10));
        gamePanel.setSize(500,500);
        gamePanel.setBackground(Color.blue);
        mainPanel.add(gamePanel);
        mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
    }
}

обновленный код:

import javax.swing.SwingUtilities;

public class Main {

    static public void main(String Args[]) {

        GameModelImpl gameModel = new GameModelImpl(10,10);
        GameViewImpl gameView = new GameViewImpl();
        GameControllerImpl gameController = new GameControllerImpl();

        gameModel.setView(gameView);
        gameView.setController(gameController);
        gameController.setModel(gameModel);
        gameView.createAndShowThread();
        SwingUtilities.invokeLater(()->gameView.createAndShowThread());
    }
}
...