2016-10-23 8 views
0

Я пытаюсь установить макет JFrame в качестве макета сетки. Я хочу по существу выглядеть как 4 сетки одинакового размера, но с дном 2 объединены в одну панель. Я добавляю JPanels к каждому. Тем не менее, я получаю 3 небольших сетки в середине JFrame, но не должным образом. Это похоже на это.GridBagLayout создание очень маленьких панелей

Мой код выглядит следующим образом:

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

public class Hangman extends JPanel{ 
    private String word; 
    private JPanel hA, gL, letters; 

    public void setupLayout(JFrame window){ 
      window.setLayout(new GridBagLayout()); 
      GridBagConstraints c = new GridBagConstraints(); 

      hA = new JPanel(); 
      hA.setBackground(Color.blue); 
      c.fill = GridBagConstraints.BOTH; 
      c.gridx = 0; 
      c.gridy = 0; 
      window.add(hA, c); 

      gL = new JPanel(); 
      gL.setBackground(Color.green); 
      c.fill = GridBagConstraints.BOTH; 
      c.gridx = 1; 
      c.gridy = 0; 
      window.add(gL, c); 

      letters = new JPanel(); 
      letters.setBackground(Color.black); 
      c.fill = GridBagConstraints.BOTH; 
      c.weightx = 1.0; 
      c.gridx = 0; 
      c.gridy = 1; 
      c.gridwidth = 2; 
      window.add(letters, c); 
    } 
     public void startWindow(){ 
      JFrame window = new JFrame(); 
      Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); 
      int screenHeight = (int) screenSize.getHeight(); 
      int windowHeight = (int) ((screenHeight/4) * 3); 
      window.setSize(windowHeight, windowHeight); 
      window.setLocationRelativeTo(null); 
      window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      setupLayout(window); 
      window.setVisible(true); 
    } 

    public void startGame(){ 
      Prep prepare = new Prep(); 
      word = prepare.findWord(true); 
      startWindow(); 
    } 

    public static void main(String[] args){ 
       Hangman start = new Hangman(); 
      start.startGame(); 
    } 
} 

Это не очень важно то, что делает Prep. Это просто случайное слово из текстового файла. Я не мог понять, как это повлияет на макет. Чтобы повторить, мне нужно сделать так, чтобы каждое из четырех пространств сетки занимало одну четверть окна, а затем делало донные 2 ячейки объединенными с JPanel, добавленным к каждому из них. Любая помощь приветствуется. Заранее спасибо.

EDIT: Мне нужно было установить вес всех из них, чтобы быть 1. Он решен.

ответ

2

GridBagLayout отображает каждый компонент в предпочтительном размере. Поскольку вы не добавляли какие-либо компоненты к панелям, вы видите небольшую панель.

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

Для получения дополнительной информации и рабочих примеров ознакомьтесь с разделом из учебника Swing по телефону How to Use GridBagLayout. Вы захотите взглянуть на ограничения «fill» и «weightx/weighty».

, а затем сделать нижние 2 клетки объединены

вы также должны смотреть на "gridwidth/gridheight" ограничений.

+0

* «EDIT: Мне нужно было установить вес всех из них, чтобы он был 1. Он решен». * Хорошо, но редактирование вопроса - это неправильное место/способ сообщить об этом. Пожалуйста, [примите этот ответ] (http://meta.stackexchange.com/a/5235/155831), если это поможет решить проблему. –