Как мне предотвратить изменение размера JButton?
Я пытаюсь сделать простую игру, в которой вы можете установить плитки, которые составляют кельтский дизайн, и я не могу заставить кнопки оставаться одинакового размера. Вот код:
public class CTGContent {
public static JPanel content = new JPanel();
private static JButton board[][] = new JButton[20][20];
static private Random random = new Random();
public static int CTGcolumn = random.nextInt(14)+1;
public static int CTGRow = 15;
private static GridLayout boardLayout;
public final int getBoardWidth(){
return CTGcolumn*40;
}
public final int getBoardHeight(){
return CTGRow*40;
}
public static void initializeBoard(){
int row = 0;
int column = 0;
int defaultCOL = 0;
int defaultROW = 0;
boardLayout = new GridLayout(CTGRow, CTGcolumn);
content.setLayout(boardLayout);
Random determine = new Random();
while (row < CTGRow){
column = 0;
while (column < CTGcolumn){
board[row][column] = new JButton(new ImageIcon("images\\template.gif"));
board[row][column].setPreferredSize(new Dimension(40, 40));
board[row][column].setMaximumSize(new Dimension(40, 40));
board[row][column].setMinimumSize(new Dimension(40, 40));
content.add(board[row][column]);
column++;
}
row++;
}
}
private static void build(){
initializeBoard();
JFrame window = new JFrame("testing the menubar");
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setContentPane(content);
content.add(new JLabel("My Label"));
window.pack();
window.setVisible(true);
}
public CTGContent() {
}
public CTGContent(JFrame window){
initializeBoard();
window.add(content);
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater( new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
build();
}
});
}
}
Обычно он начинается с правильного размера, но затем по какой-то причине, если я изменю размер окна или что-то еще, они меняют его размер. Мне нужно, чтобы они остались одного размера, несмотря ни на что. Как я могу это сделать?
2 ответа
Изменить:
window.setContentPane(content);
Для того, чтобы:
JPanel contentCenter = new JPanel(new GridBagLayout());
contentCenter.add(content);
window.setContentPane(contentCenter);
Есть и другие способы сделать это, например, сделать макет FlowLayout
, но GBL будет держать его по центру - как вертикально, так и горизонтально.
подсказки
- Пожалуйста, изучите общие соглашения об именах Java (в частности, случай, используемый для имен) для имен классов, методов и атрибутов и используйте их последовательно.
- Для лучшей помощи, скорее, отправьте MCVE. Этот код нужно было импортировать только для того, чтобы сделать его MCVE.
- Смотрите также этот ответ на Центрирование JLabel на JPanel
Ты используешь GridLayout
потому что ваши кнопки изменяют размер по горизонтали / вертикали всегда, чтобы заполнить всю ячейку сетки. Для предотвращения этого вы можете использовать другой LayoutManager
, например GridBagLayout
,
Всегда читайте о настройке размера для компонентов.