GridLayout verändert festgesetzte Größe der Komponenten

Status
Nicht offen für weitere Antworten.

Lexi

Bekanntes Mitglied
Folgendes Problem:

Ich habe ein Panel, welches 10x10 Buttons enthält.
Diese Buttons liegen auf einem Panel dessen Layout ein GridLayout ist.
Das Panel mit den Buttons liegt, zusammen mit einem weiteren Panel auf der contentPane, die eine BorderLayout hat.
(ButtonPanel BorderLayout.CENTER | anderesPanel BorderLayout.SOUTH)

Die Buttons sind eine aus JButton abgeleitete Klasse, in der ich getPrefferedSize, getMinimumSize() und getMaximumSize() überschrieben habe. Alle 3 Methoden liefern den gleichen Wert zurück.

Sobald ich von dem ButtonPanel jetzt alle Buttons entferne und danach wieder z.B 16x16 oder 20x20 Buttons draufmache, werden die Buttons alle um einwenig kleiner dargestellt als sie eigentlich laut der "Size-Methoden" dürften.

Sollte Code-Bedarf bestehen, bitte kurz anmerken..
 

Marco13

Top Contributor
Naja, wenn 10x10 in der richtigen Größe angezeigt werden, dann... passen nicht 12x12 in der gleichen Größe drauf...?! (Wenn du noch ein hauptFrame.pack(); hinterherschieben würdest, würde sich das Fenster ggf. anpassen, aber ... was soll das Programm machen?...)
 

Lexi

Bekanntes Mitglied
pack() rufe ich dann selbstverständlich auf...
Das ganze ist ein Minesweeper Spiel, bei dem man die Möglichkeit haben soll die Größe des Spielfeldes bzw die Anzahl der einzelnen Felder zu variieren...
 

Ebenius

Top Contributor
Quelltext wäre wohl ganz gut. Wenn möglich zusammengeschrumpft aber in sich vollständig.

Ebenius
 

Lexi

Bekanntes Mitglied
Wenn euch da ncohwas fehlt, bitte bescheid geben :

[HIGHLIGHT="Java"]import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Oberfläche
extends JFrame
implements ActionListener
{
private Spiel spiel;
private KachelButton felder[][];

private final JButton btNeu;
private final JComboBox cbKacheln, cbFrustFaktor;
private JPanel kachelPanel;

public Oberfläche()
{
super("Minesweeper - Lexi");
Container cp = getContentPane();
addWindowListener( new WindowAdapter(){
//...
);
cp.setLayout(new BorderLayout());
kachelPanel = new JPanel(){
@Override
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
//...Hier werden nur g.drawString und g.fillOval aufgerufen
}
};
addKachelButtons();

//Comboboxen zur Größen und Schwierigkeits Einstellung
JPanel menuPanel = new JPanel();
JPanel dropDownPanel = new JPanel();
dropDownPanel.setLayout(new GridLayout(1,2));
String[] frustFaktoren = { "Sehr Leicht",
"Leicht",
"Normal",
"Schwer",
"Sehr Schwer" };
cbFrustFaktor = new JComboBox(frustFaktoren);
cbFrustFaktor.setEditable(false);
dropDownPanel.add(cbFrustFaktor);
String[] kachelAnzahl = { "10x10","16x16","20x20" };
cbKacheln = new JComboBox(kachelAnzahl);
cbKacheln.setEditable(false);
dropDownPanel.add(cbKacheln);
menuPanel.add(dropDownPanel);

btNeu = new JButton("Neues Spiel");
btNeu.addActionListener(this);
menuPanel.add(btNeu);

cp.add(kachelPanel,BorderLayout.NORTH);
cp.add(menuPanel,BorderLayout.SOUTH);
setVisible(true);
pack();
}

@Override
public void actionPerformed(ActionEvent ae)
{
if(ae.getSource().equals(btNeu)) // Neues Spiel
{
//Hier werden die BUttons neu aufs Panel gemacht
kachelPanel.removeAll();
addKachelButtons();
pack();
kachelPanel.repaint();
}
}

class MyMouseListener
extends MouseAdapter
{
@Override
public void mousePressed(MouseEvent me)
{
//...
}
}

private void addKachelButtons()
{
felder = new KachelButton[feldGroesse][feldGroesse];
kachelPanel.setLayout(new GridLayout(feldGroesse,feldGroesse));
for(int j = 0; j < feldGroesse; j++)
for(int i = 0;i < feldGroesse; i++){
felder[j] = new KachelButton(i+1,j+1);
felder[j].addMouseListener(new MyMouseListener());
felder[j].setMargin(new Insets(0,0,0,0));
kachelPanel.add(felder[j]);
}
}
}[/HIGHLIGHT]


EDIT: Habe noch 2 Screenshots angehängt.
 

Anhänge

  • MS10x10.JPG
    MS10x10.JPG
    22,9 KB · Aufrufe: 65
  • MS20x20.JPG
    MS20x20.JPG
    72,2 KB · Aufrufe: 70
Zuletzt bearbeitet:

Marco13

Top Contributor
Mit "in sich vollständig" ist i.a. gemeint: Etwas, was man mit Copy&Paste rauskopieren und compilieren kann, und wo man dann auf einen Button klickt und den Fehler sieht.

Lieber 50 Zeilen mehr Code und Compilierbar, als 50 Zeilen weniger und irgendwelche Obskuren Klassen dabei, von denen man nicht weiß, wie sie implementiert sind, und die auf die Funktion einfluß haben könn(t)en....
 

Marco13

Top Contributor
Setzt du vielleicht (in dem Teil, den du nicht gepostet hast) die PreferredSize vom KachelPanel oder irgendeiner anderen Component (außer den KachelButtons) auf irgendeinen festen Wert?
 

Lexi

Bekanntes Mitglied
Die Buttons sind eine aus JButton abgeleitete Klasse, in der ich getPrefferedSize, getMinimumSize() und getMaximumSize() überschrieben habe. Alle 3 Methoden liefern den gleichen Wert zurück.

Ja das hab ich gemacht.

[HIGHLIGHT="Java"]import javax.swing.*;
import java.awt.*;

public class KachelButton
extends JButton
{
private final Dimension groesse = new Dimension(30,30);

public KachelButton()
{
super();
}

@Override
public Dimension getPreferredSize()
{
return groesse;
}

@Override
public Dimension getMinimumSize()
{
return groesse;
}

@Override
public Dimension getMaximumSize()
{
return groesse;
}

}[/HIGHLIGHT]
 

Marco13

Top Contributor
Setzt du vielleicht (in dem Teil, den du nicht gepostet hast) die PreferredSize vom KachelPanel oder irgendeiner anderen Component (außer den KachelButtons) auf irgendeinen festen Wert?

Bei den KachelButtons ist das OK. Auch wenn eine eigene Klasse dafür nicht angebracht ist, aber vielleicht können sie in Wirklichkeit ja noch mehr.

Die Frage war, ob du irgendwo sowas machst wie
kachelPanel.setPreferredSize(new Dimension(300,300));
oder so.
 

Marco13

Top Contributor
Code:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Oberflache
extends JFrame
implements ActionListener
{
    public static void main(String args[])
    {
        new Oberflache();
    }

    private final JButton btNeu;
    private JPanel kachelPanel;
    private int feldGroesse=5;

    public Oberflache()
    {
       super("Minesweeper - Lexi");
       Container cp = getContentPane();
       cp.setLayout(new BorderLayout());

       kachelPanel = new JPanel();

       btNeu = new JButton("Neues Spiel");
       btNeu.addActionListener(this);

       cp.add(kachelPanel,BorderLayout.NORTH);
       cp.add(btNeu,BorderLayout.SOUTH);
       setVisible(true);
       pack();
    }

    @Override
    public void actionPerformed(ActionEvent ae)
    {
          kachelPanel.removeAll();
          feldGroesse+=2;
          addKachelButtons();
          pack();
          kachelPanel.repaint();
    }

    private void addKachelButtons()
    {
        kachelPanel.setLayout(new GridLayout(feldGroesse,feldGroesse));
        for(int j = 0; j < feldGroesse; j++)
          for(int i = 0;i < feldGroesse; i++){
            JButton b = new JButton(i+","+j);
            b.setMargin(new Insets(0,0,0,0));
            kachelPanel.add(b);

       }
    }
}
 

Ebenius

Top Contributor
Ja das hab ich gemacht.

[HIGHLIGHT="Java"]@Override
public Dimension getPreferredSize()
{
return groesse;
}[/HIGHLIGHT]
Anmerkung am Rande: Mach sowas nicht; die Werte der Dimension-Klasse sind veränderbar. Immer eine selbständige Instanz zurückgeben: [HIGHLIGHT="Java"]@Override
public Dimension getPreferredSize()
{
return new Dimension(groesse);
}[/HIGHLIGHT]
Ebenius
 

Marco13

Top Contributor
Noch kleinere Anmerkung: Sowas löst man i.a. nicht durch das Erstellen einer abgeleiteten Klasse und Überschreiben der Methoden (was ich ja schon hinterfragt hatte), sondern dadurch, dass man schlicht und einfach "button.setPreferredSize(...)" aufruft.... So ein Überschreiben kann (wenn man nicht genau weiß, was man da tut) SEHR unschöne Seiteneffekte haben...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
R LayoutManager GridLayout verändert isch andauernd AWT, Swing, JavaFX & SWT 4
E GridLayout auf ScrollPane AWT, Swing, JavaFX & SWT 4
thor_norsk GridLayout AWT, Swing, JavaFX & SWT 11
H Swing , GridLayout, Größenbestimmung der Komponenten im Layout AWT, Swing, JavaFX & SWT 8
M Swing GridLayout AWT, Swing, JavaFX & SWT 2
D [Swing] Anordnung von Komponenten mit GridLayout Manager AWT, Swing, JavaFX & SWT 13
pkm kryptisches Verhalten bei GridLayout AWT, Swing, JavaFX & SWT 4
K Swing GridLayout - x und y bei Mausklick ausgeben AWT, Swing, JavaFX & SWT 4
S GridLayout SWT: Anordnung Composites nebeneinander AWT, Swing, JavaFX & SWT 2
B GridLayout - wie am besten implementieren AWT, Swing, JavaFX & SWT 3
B GridLayout Basics AWT, Swing, JavaFX & SWT 1
L Eigene JComponent in GridLayout AWT, Swing, JavaFX & SWT 9
fLooojava GridLayout - Frage bezüglich Kachelgröße AWT, Swing, JavaFX & SWT 5
F JPanel "verschmelzen" GridLayout AWT, Swing, JavaFX & SWT 10
M LayoutManager GridLayout funktioniert nicht AWT, Swing, JavaFX & SWT 0
T LayoutManager GridLayout panel.setSize funktioniert nicht AWT, Swing, JavaFX & SWT 1
F Gridlayout AWT, Swing, JavaFX & SWT 6
A JPanel oder GridLayout Größe festsetzten AWT, Swing, JavaFX & SWT 4
X GridLayout JPanel austauschen AWT, Swing, JavaFX & SWT 2
A JFrame Größenänderung mit Maus und GridLayout AWT, Swing, JavaFX & SWT 10
J Button in GridLayout AWT, Swing, JavaFX & SWT 2
C LayoutManager Grafik soll nicht im GridLayout Skalieren AWT, Swing, JavaFX & SWT 3
L LayoutManager GridLayout verschiebt sich AWT, Swing, JavaFX & SWT 6
B GridLayout AWT, Swing, JavaFX & SWT 6
T Spaltengröße einzelner Spalten in Gridlayout festlegen AWT, Swing, JavaFX & SWT 3
Karuka Abstände im GridLayout ändern AWT, Swing, JavaFX & SWT 8
Karuka 2D-Grafik Bilder in GridLayout einfügen AWT, Swing, JavaFX & SWT 7
C Scollpane an dynamisches GridLayout anpassen? AWT, Swing, JavaFX & SWT 3
J Swing Bilder anzeigen in Gridlayout AWT, Swing, JavaFX & SWT 11
C Linien über GridLayout zeichnen AWT, Swing, JavaFX & SWT 3
K Probleme mit Gridlayout AWT, Swing, JavaFX & SWT 4
U Elemente im Panel zentrieren mit GridLayout AWT, Swing, JavaFX & SWT 3
Z Swing JButton erweitern/Gridlayout AWT, Swing, JavaFX & SWT 2
L Swing GridLayout AWT, Swing, JavaFX & SWT 4
lumo LayoutManager SWT GridLayout - Reihenfolge ändern AWT, Swing, JavaFX & SWT 7
C Swing GridLayout: Kann man die Spaltenbreiten variabel gestalten? AWT, Swing, JavaFX & SWT 4
J SWT Größe eines Composite mit Gridlayout festlegen AWT, Swing, JavaFX & SWT 2
Y Kein GantChart in einem GridLayout AWT, Swing, JavaFX & SWT 5
M Formular in GridLayout ? AWT, Swing, JavaFX & SWT 17
R LayoutManager Problem mit GridLayout AWT, Swing, JavaFX & SWT 5
F LayoutManager GridLayout 0/0 auf andere Ecke setzen AWT, Swing, JavaFX & SWT 4
Rudolf Swing Gridlayout und Grouper vorhanden? AWT, Swing, JavaFX & SWT 4
S SWT GridLayout scrollbar machen? AWT, Swing, JavaFX & SWT 7
A Gridlayout Vertikal anordnen AWT, Swing, JavaFX & SWT 6
D LayoutManager GridLayout, 2 labels nebeneinander AWT, Swing, JavaFX & SWT 8
B Swing GridLayout.add über 2 Spalten? AWT, Swing, JavaFX & SWT 7
A Frage zu GridLayout AWT, Swing, JavaFX & SWT 4
B GridLayout und scrollbar AWT, Swing, JavaFX & SWT 5
J Swing Bild in GridLayout AWT, Swing, JavaFX & SWT 8
aze GridLayout: Keine automatische Ausdehnung AWT, Swing, JavaFX & SWT 2
M SWT keine Scrollbar bei widgets.List und GridLayout AWT, Swing, JavaFX & SWT 2
M Image an Gridlayout anpassen AWT, Swing, JavaFX & SWT 5
E SWT Problem mit Gridlayout AWT, Swing, JavaFX & SWT 3
G SWT GridLayout AWT, Swing, JavaFX & SWT 2
lumo SWT GridLayout - clear? AWT, Swing, JavaFX & SWT 4
T GridLayout Zeilen Hintergrund AWT, Swing, JavaFX & SWT 5
N Gridlayout macht Probleme AWT, Swing, JavaFX & SWT 3
S Gridlayout - Tabellenzeile "beenden" AWT, Swing, JavaFX & SWT 3
Dragonfire GridLayout Probleme AWT, Swing, JavaFX & SWT 4
A JLabel, Icons und GridLayout AWT, Swing, JavaFX & SWT 3
C JPanel-Array in GridLayout AWT, Swing, JavaFX & SWT 4
G SWT GridLayout AWT, Swing, JavaFX & SWT 3
N Gridlayout 2. Spalte füllen AWT, Swing, JavaFX & SWT 4
W Problem mit GridLayout AWT, Swing, JavaFX & SWT 11
K Problem mit nem GridLayout AWT, Swing, JavaFX & SWT 5
T GridLayout, zu wenig Platz zwischen Widgets AWT, Swing, JavaFX & SWT 3
T SWT/Eclipse Form Controls zur Laufzeit hinzufügen,GridLayout AWT, Swing, JavaFX & SWT 4
M GridLayout mit fester Größe möglich? AWT, Swing, JavaFX & SWT 3
E Einfache Frage zu GridLayout AWT, Swing, JavaFX & SWT 35
G Größe der einzelenen Felder im GridLayout einstellbar? AWT, Swing, JavaFX & SWT 5
P Canvas in JFrame mit GridLayout AWT, Swing, JavaFX & SWT 4
F GridLayout: verschiedene Spaltenbreiten AWT, Swing, JavaFX & SWT 2
S GridLayout ? AWT, Swing, JavaFX & SWT 5
D AutoResize bei GridLayout ausschalten? AWT, Swing, JavaFX & SWT 2
D GridLayout mit nur einer Spalte, aber n Zeilen AWT, Swing, JavaFX & SWT 2
E GridLayout seltsame Anordnungsstrategie AWT, Swing, JavaFX & SWT 6
S Problemen mit Canvas-Objekten im GridLayout AWT, Swing, JavaFX & SWT 8
L Grids benennen beim GridLayout AWT, Swing, JavaFX & SWT 5
S GridLayout mit sehr großen Abständen AWT, Swing, JavaFX & SWT 3
I SWT GridLayout AWT, Swing, JavaFX & SWT 5
V Frage zu GridLayout. AWT, Swing, JavaFX & SWT 3
P SWT GridLayout AWT, Swing, JavaFX & SWT 5
O gridlayout konstante größe AWT, Swing, JavaFX & SWT 3
TRunKX Problem mit dem GridLayout und den proportionen AWT, Swing, JavaFX & SWT 4
P SWT: GridLayout und Textfelder AWT, Swing, JavaFX & SWT 1
M GridLayout funktioniert nicht mehr. AWT, Swing, JavaFX & SWT 2
F GridLayout horizontal ausrichten AWT, Swing, JavaFX & SWT 6
K GridLayout: Colspan, Rowspan AWT, Swing, JavaFX & SWT 2
R GridLayout spinnt AWT, Swing, JavaFX & SWT 14
C leeres Element in Gridlayout einfuegen AWT, Swing, JavaFX & SWT 3
D Problem bei GridLayout und JPanels AWT, Swing, JavaFX & SWT 4
J GridLayout AWT, Swing, JavaFX & SWT 5
H GridLayout: Größe einer Komponente ändern AWT, Swing, JavaFX & SWT 2
L Frage zum GridLayout AWT, Swing, JavaFX & SWT 4
G kann man die aufteilung von GridLayout beeinflussen ? AWT, Swing, JavaFX & SWT 10
P JTextField wird nur sehr klein angezeigt und verändert die Größe nicht AWT, Swing, JavaFX & SWT 3
M Wieso verändert sich die Framerate nach erneutem Starten des AnimationTimer? AWT, Swing, JavaFX & SWT 18
sascha-sphw JavaFX ListCell höhe verändert sich beim ändern der Text-Farbe AWT, Swing, JavaFX & SWT 14
K GridBagLayout verändert die größe? AWT, Swing, JavaFX & SWT 1
C SWT Treeview mit Bilder im Label verändert Expanded Icon AWT, Swing, JavaFX & SWT 1

Ähnliche Java Themen

Neue Themen


Oben