/ / Java Swing UI bricht in Aktion - Java, Swing

Java Swing UI bricht auf Action - Java, Swing

Ich habe ein BorderLayout mit 3 Panels eingerichtetWest, ein Zentrum und der dritte Süden einnehmen. Wenn ich eine Aktion durchführe (z. B. ein Mausklick in der mittleren Leiste), wird die Leiste im Westen in der mittleren Leiste angezeigt. Wenn ich auf die Schaltfläche in der südlichen Leiste klicke, erscheint sie auch im Norden. Es ist zu beachten, dass die Komponenten ihr Panel nicht verlassen, sondern auch an anderer Stelle im Rahmen angezeigt werden. Irgendeine Idee, was das verursachen könnte? Ich rufe gerade repaint () an, um die GUI zu aktualisieren. Soll ich sie auf eine andere Weise aktualisieren?

So füge ich die Panels hinzu

GridJPanel gp = new GridJPanel();

TextJPanel tp = new TextJPanel();
sp.setPreferredSize(new Dimension(300, 300));

JPanel buttonsPanel = new JPanel();
buttonsPanel.add(stepButton);

getContentPane().add(tp, BorderLayout.WEST);
getContentPane().add(gp, BorderLayout.CENTER);
getContentPane().add(buttonsPanel, BorderLayout.SOUTH);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(700, 400);
setVisible(true);

Dies ist der Maus-Listener, der den Westen dazu veranlasst, zur Mitte zu springen. Derselbe Zuhörer bewirkt auch, dass der Süden im Norden erscheint.

addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent evt) {

if(ready) {
points.removeAll(points);
ready = false;
}

xP = evt.getX() / dGrid;
yP = evt.getY() / dGrid;
points.add(new Point2D.Float(xP, yP));
if(points.size() == 2) {
ready = true;
repaint();
}
}
});

paintComponent-Methode

public void paintComponent(Graphics g) {
initgr();
showGrid(g);

if(ready) {
drawLine(g, (int) points.get(points.size() - 2).getX(), (int) points.get(points.size() - 2).getY(), (int) points.get(points.size() - 1).getX(), (int) points.get(points.size() - 1).getY());
}
}

Antworten:

0 für die Antwort № 1

Fügen Sie jedem Ihrer Panels eine Hintergrundfarbe hinzu. Testen Sie Ihren Code erneut und sehen Sie, was die Farben Ihnen sagen. Wenn ein Panel leer ist, wird es häufig zusammengeklappt und andere Panels wachsen oder schrumpfen, um Platz zu sparen. Ich würde die Regeln durchsehen, für die Panels Vorrang haben. Ich schätze, die erste hinzugefügte Komponente erhält Vorrang, wenn die Größenänderung eintritt, aber ich bin nicht sicher, und es sollte einfach sein, ein Beispiel zu erstellen, um die Vorrangigkeit zu bestimmen. Von dem Javadoc es sieht aus wie:

Die Komponenten NORTH und SOUTH können gedehnt werdenhorizontal; der Osten und WEST-Komponenten können vertikal gestreckt werden; die CENTER-Komponente kann sich sowohl horizontal als auch vertikal erstrecken, um den verbleibenden Raum auszufüllen Über.