Как я могу сложить два вида друг на друга? - PullRequest
0 голосов
/ 29 декабря 2018

У меня есть 3 вида, playView, gameView и timeView.

gameView - верхний левый блок.timeView - нижний левый блок, а playView - правый.

Это фотография программы, которую мне нужно переделать.

enter image description here

Как я должен сложить эти два вида друг на друга.И затем другой вид справа от этих двух.

Как видите, нижний левый блок немного больше верхнего левого блока.

Я пытался использовать GridLayout и BoxLayoutно, похоже, ничего из этого не работает.

Это то, что я пробовал.Это работает, но размер остается одинаковым для двух левых блоков.

    public void setGameView(GameView gameView, PlayView playView,TimeView timeView) {
    this.gameView = gameView;
    this.playView = playView;
    this.timeView = timeView;

    JPanel subPanel = new JPanel(new BoxLayout(this, BoxLayout.Y_AXIS));
    subPanel.add(gameView);
    subPanel.add(timeView);

    this.add(playView, BorderLayout.EAST);
    this.add(subPanel, BorderLayout.WEST);
  }

Я бы хотел получить тот же результат, что и на фотографии.Если кто-то может направить меня в правильном направлении.Какой макет мне использовать?

Ответы [ 2 ]

0 голосов
/ 29 декабря 2018

Я установил размер

Вы не должны устанавливать размер.

Если вы используете компоненты на панелях, то каждый менеджер макета определит предпочтительный размер.

Если вы выполняете пользовательское рисование, тогда ваш компонент должен реализовать метод getPreferredSize(), чтобы менеджеры макета моглиделать свою работу

при использовании BoxLayout я не могу разместить два компонента на левой стороне

JPanel subPanel = new JPanel(new BoxLayout(this, BoxLayout.Y_AXIS));
subPanel.add(gameView);
subPanel.add(timeView);

Вы устанавливаете неправильную панель для использования BoxLayout.

Код должен быть:

//JPanel subPanel = new JPanel(new BoxLayout(this, BoxLayout.Y_AXIS));
JPanel subPanel = new JPanel();
subPanel.setLayout(new BoxLayout(subPanel, BoxLayout.Y_AXIS));

Или проще подать в суд на класс Box:

Box subpanel = Box.createVerticalBox();
0 голосов
/ 29 декабря 2018

В BorderLayout, если никакой элемент не занимает определенную границу, панель в CENTER будет расширяться до края родительского элемента.

В вашем случае ваш gamePanel должен бытьпомещается в CENTER, а не EAST.Ваша субпанель должна оставаться там, где она находится в WEST.

...