Ich versuche, ein GridBagLayout zu verwenden, um ein JFrame zu haben, das ein JPanel enthält, das über ein Rasterlayout und ein JPanel mit nur einem großen Button verfügt. Ich möchte, dass alle Zeilen die gleiche Größe haben und dass JPanel mit der JButton dieselbe Größe wie eine Zeile hat. Allerdings ist die Schaltfläche, die derzeit leer ist, etwa 1/3 des JFrame. Ich bin mir nicht ganz sicher, was passiert, aber es ist sehr wichtig für mich, dass ich diese Struktur beibehalte, weil der Rest meines Codes dies verwendet. Jede Hilfe wird geschätzt, und ich danke Ihnen im Voraus.Unsachgemäße Größenanpassung mit GridBagLayout
Dies ist mein Code:
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();
}
}
Dies ist, was gezeigt wird:
'JPanel p = neues JPanel();' Tun Sie sich (und dem Benutzer) einen Gefallen. Machen Sie das 'JButton p = new JButton();'. Wir können einer Schaltfläche einen 'ActionListener' hinzufügen, der auf Mausklicks und Tastaturaktionen reagiert. Schaltflächen unterstützen auch Symbole und/oder Text (nützlich für leere Kacheln, gelöschte Kacheln, Minen oder Anzahl umgebender Minen usw.) –
Ich habe bereits eine Panel-Klasse geschrieben, die jpanels verwendet. Das Ziel ist ein Minesweeper-Spiel, also muss ich in der Lage sein, sie ein wenig mehr zu manipulieren. – acn3
* "Also muss ich in der Lage sein, sie ein wenig mehr zu manipulieren." * Wie konkret? Ich bezweifle, dass es etwas gibt, was ein Panel tun kann, dass ein Knopf nicht kann. –