Я пытаюсь использовать GridBagLayout для создания JFrame, который содержит JPanel, который имеет макет сетки и JPanel с помощью только большой кнопки. Я хочу, чтобы все строки были одинакового размера, а JPanel с JButton - того же размера, что и одна строка. Однако панель кнопок, которая в настоящее время пуста, составляет около 1/3 от JFrame. Я не совсем уверен, что происходит, но для меня очень важно, что я поддерживаю эту структуру, потому что остальная часть моего кода использует это. Любая помощь приветствуется, и спасибо заблаговременно.Неправильная калибровка с использованием GridBagLayout
Это мой код:
import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;
public class Minesweeper extends JPanel {
private final int SIZE = 7;
public void startGame(){
JFrame holder = new JFrame();
JPanel window = new JPanel();
JPanel pan = new JPanel();
holder.setLayout(new GridBagLayout());
GridBagConstraints con = new GridBagConstraints();
con.weightx = 1;
con.weighty = 1;
con.gridx = 0;
con.gridy = 0;
con.fill = GridBagConstraints.BOTH;
con.gridheight = SIZE;
con.gridwidth = SIZE;
holder.getContentPane().setBackground(Color.darkGray);
holder.setSize(450, 450);
holder.setResizable(false);
holder.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setBackground(Color.darkGray);
window.setLayout(new GridLayout(SIZE, SIZE));
for (int c=0; c<(SIZE*SIZE); c++){
int row = (c/SIZE);
int col = (c%SIZE);
JPanel p = new JPanel();
p.setBackground(Color.gray);
Border b = BorderFactory.createEtchedBorder(EtchedBorder.RAISED);
p.setBorder(b);
window.add(p);
}
holder.add(window, con);
con.gridx = 0;
con.gridy = SIZE+1;
con.gridheight = 0;
con.gridwidth = SIZE;
holder.add(pan, con);
holder.setVisible(true);
}
public static void main(String[] args){
Minesweeper start = new Minesweeper();
start.startGame();
}
}
Это то, что показывается:
'JPanel p = new JPanel();' Сделайте себе (и пользователю) услугу. Сделайте это 'JButton p = new JButton();'. Мы можем добавить кнопку «ActionListener» к кнопке, и она будет реагировать как на мыши, так и на действия клавиатуры. Кнопки также поддерживают значки &/или текст (полезны для пустых фрагментов, очищенных плиток, мин или количества окружающих шахт и т. Д.) –
Я уже написал класс панели, который использует jpanels. Цель игры - тральщик, поэтому мне нужно иметь возможность манипулировать ими немного больше. – acn3
* «Поэтому мне нужно иметь возможность манипулировать ими немного больше». * Как, конкретно? Я сомневаюсь, что что-нибудь может сделать панель, что кнопка не может. –