Ich versuche, eine JLabel
einer Nachricht unter einem Raster von angezeigten Quadraten anzuzeigen (jedes Quadrat ist ein JLabel
). Wenn ich nicht versuche, die Nachricht an die JPanel
hinzuzufügen, zeigt das 4x4 Raster der Quadrate einfach gut. Wenn ich jedoch versuche, die Nachricht JLabel
unter oder über dem Gitter hinzuzufügen, passiert, dass das Gitter der Quadrate in zwei geteilt wird (nach der ersten Spalte der Quadrate), so dass eine Spalte mit Quadraten auf der linken Seite angezeigt wird ist eine Lücke, und dann werden die anderen drei Spalten von Quadraten angezeigt. Die Nachricht wird darunter angezeigt. Warum führt das Hinzufügen dieser Nachricht dazu, dass sich das Gitter aus Quadraten so aufteilt? Ich habe meinen Code unten eingefügt. Vielen Dank im Voraus für jede Hilfe.GridBagLayout macht seltsame Dinge beim Versuch, eine Nachricht hinzuzufügen JLabel unter einem Raster von Quadraten
public void displayGrid(JButton button) {
JLabel instructionsLabel = new JLabel ("Select the locations of the four objects that you saw previously. Be careful - when you select one box, you can't take it back.");
try {
squareImage = ImageIO.read(this.getClass().getResource("stimulus(0).gif"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for(int i = 0; i < 16; i++){
c.gridx = i % 4;
c.gridy = i/4;
squareLabels[i] = new JLabel(new ImageIcon(squareImage));
panel.add(squareLabels[i], c);
squareLabels[i].addMouseListener(this);
}
panel.validate();
c.gridy += 1;
c.gridx = 0;
panel.add(instructionsLabel, c);
panel.validate();
}
Meinst du GridBagConstraints? Ich dachte, mit der gleichen Instanz wäre die ganze Idee. Wenn Sie zwei verschiedene GridBagConstraints verwenden, können Sie es nicht so einrichten, dass sie sich nicht gegenseitig stören. – lb91
Es gibt kein Problem mit der Wiederverwendung von 'GridBagConstraints': https://docs.oracle.com/javase/tutorial/uiswing/layout/gridbag.html – Berger
Okay, ich bin ziemlich sicher, dass ich Probleme in der Vergangenheit mit dem gleichen GridBagConstraints-Objekt - aber ich bin bereit zu akzeptieren, dass ich falsch liege. Sie haben eine sehr klare IO- und Swing-Modellmanipulation für denselben Thread in Ihrem Code. Ziehen Sie in Erwägung, SwingWorker zu verwenden, um die IO-Task zu verwalten. Außerdem haben Sie 'c.gridy = i/4;' da drin, was für mich wie ein Käfer aussieht - ist das Absicht? – Lee