Создаю текстовую игру. Проблема в окне с самими действиями в игре. Хочется, что бы окно выглядело так: Для этого я решил использовать GridBagLayout, но его работа мне не понятна, потому что при использовании следующего кода:
Класс GamePanel
public class GamePanel extends JPanel {
JTextArea txtGameLog;
NavigatePanel navigatePanel;
InfoPanel infoPanel;
public GamePanel() {
setBackground(new Color(200, 120, 90));
txtGameLog = new JTextArea();
navigatePanel = new NavigatePanel();
infoPanel = new InfoPanel();
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.BOTH;
gbc.weightx = 1;
gbc.weighty = 0.1;
gbc.gridx = 0;
gbc.gridy = 0;
gbc.gridwidth = 2;
gbc.anchor = GridBagConstraints.PAGE_START;
add(txtGameLog, gbc);
gbc.weighty = 0.25;
gbc.gridx = 0;
gbc.gridy = 1;
gbc.gridwidth = 1;
gbc.anchor = GridBagConstraints.LAST_LINE_START;
add(infoPanel, gbc);
gbc.gridx = 1;
gbc.gridy = 1;
gbc.gridwidth = 1;
gbc.anchor = GridBagConstraints.LAST_LINE_END;
add(navigatePanel, gbc);
}
}
class NavigatePanel extends JPanel {
GameButton btnNorth;
GameButton btnSouth;
GameButton btnWest;
GameButton btnEast;
public NavigatePanel() {
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
setBackground(Color.GRAY);
btnNorth = new GameButton(Localization.getString("ui.game.btnNorth"));
btnSouth = new GameButton(Localization.getString("ui.game.btnSouth"));
btnWest = new GameButton(Localization.getString("ui.game.btnWest"));
btnEast = new GameButton(Localization.getString("ui.game.btnEast"));
gbc.fill = GridBagConstraints.NONE;
gbc.weightx = 1;
gbc.weighty = 1;
gbc.anchor = GridBagConstraints.PAGE_END;
gbc.gridx = 0;
gbc.gridy = 0;
gbc.gridwidth = 2;
add(btnNorth, gbc);
gbc.anchor = GridBagConstraints.LINE_END;
gbc.gridx = 0;
gbc.gridy = 1;
gbc.gridwidth = 1;
add(btnWest, gbc);
gbc.anchor = GridBagConstraints.LINE_START;
gbc.gridx = 1;
gbc.gridy = 1;
gbc.gridwidth = 1;
add(btnEast, gbc);
gbc.anchor = GridBagConstraints.PAGE_START;
gbc.gridx = 0;
gbc.gridy = 2;
gbc.gridwidth = 2;
add(btnSouth, gbc);
}
}
Класс InfoPanel
class InfoPanel extends JPanel {
JLabel lblGrenade;
JLabel lblTreasure;
GameButton btnMenu;
public InfoPanel() {
setBackground(Color.LIGHT_GRAY);
btnMenu = new GameButton(Localization.getString("ui.game.btnMenu"));
add(btnMenu, BorderLayout.CENTER);
}
}
Класс GameButton
public class GameButton extends JButton{
public GameButton(String name){
super(name);
setBackground(new Color(190, 170, 155));
setMinimumSize(new Dimension(60, 60));
setMaximumSize(new Dimension(60, 60));
setSize(60, 60);
setAlignmentX(CENTER_ALIGNMENT);
}
}
Получается следующее:
Это почти, то, что я хочу. Но пропорции размещения панелей и расстояния между кнопками неправильное. Как сгруппировать кнопки как на первой картинке и как правильно задать пропорции? Как работает gbc.weightx
и gbc.weighty
?
и немного оффтоп: здесь есть сворачиваемый спойлер?
Я бы сделала так (GamePanel
):
GridBagConstraints gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.BOTH;
gbc.weightx = 1;
gbc.weighty = 1;
gbc.gridx = 0;
gbc.gridy = 0;
gbc.gridwidth = 2;
gbc.anchor = GridBagConstraints.CENTER;
add(txtGameLog, gbc);
gbc.weighty = 0;
gbc.weightx = 1;
gbc.gridx = 0;
gbc.gridy = 1;
gbc.gridwidth = 1;
gbc.fill = GridBagConstraints.BOTH;
gbc.anchor = GridBagConstraints.LAST_LINE_START;
add(infoPanel, gbc);
gbc.weighty = 0;
gbc.weightx = 0;
gbc.gridx = 1;
gbc.gridy = 1;
gbc.gridwidth = 1;
gbc.fill = GridBagConstraints.NONE;
gbc.anchor = GridBagConstraints.LAST_LINE_END;
add(navigatePanel, gbc);
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
В каждом итеме recycleView есть горизонтальный ScrollViewКак можно сделать так, чтобы при скролле ScrollView одного из итемов крутились и другие ScrollView на других...
Те существует два каталога со своими пакетами>классами, как мне добавить в проект 1 - классы из проекта 2
Стартовая страницаВ настройках tomcat http://localhost:8080/index
Есть 1000 картинок 2-х типов: 1) с чёрным текстом и белым фоном 2) инверсия первой(с белым текстом и чёрным фоном)