Warum kann ich nicht den Zugang zu meinem panel getWidth() und getHeight () - Funktionen?
Ich Schreibe ein einfaches Programm zum test aus grundlegenden GUI. Das Programm druckt einen Buchstaben in der Mitte des Bildschirms und ermöglicht es dem Benutzer, um es zu bewegen mit den Pfeiltasten. Funktioniert alles einwandfrei, aber wenn ich versuche, um die Mitte der Buchstabe am Anfang des Programms, es scheint, dass die getWidth
und getHeight
Funktionen nicht ordnungsgemäße Rückgabe der zahlen.
Hier ist das snippet mit meiner Panel Klasse
static class LinePanel extends JPanel{
int xCenter = getWidth() /2;
int yCenter = getHeight() /2;
private int x = xCenter;
private int y = yCenter;
private char keyChar = 'A';
public LinePanel(){
addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e) {
switch (e.getKeyCode()) {
case KeyEvent.VK_DOWN: y += 10; break;
case KeyEvent.VK_UP: y -= 10; break;
case KeyEvent.VK_LEFT: x -= 10; break;
case KeyEvent.VK_RIGHT: x += 10; break;
default: keyChar = e.getKeyChar();
}
repaint();
}
});
}
protected void paintComponent(Graphics g){
super.paintComponent(g);
g.setFont(new Font("TimesRoman", Font.PLAIN, 24));
g.drawString(String.valueOf(keyChar), x, y);
}
}
Warum sind meine getWidth
und getHeight
Funktionen zurückgeben '0'?
Vielen Dank für jede Hilfe
InformationsquelleAutor KAM1KAZEKOALA | 2011-12-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich kann nicht sagen, der Grund ist aber:
Einen Weg, um dies zu vermeiden, ist das überschreiben Ihrer
getPreferredSize()
- Funktion und liefert die bevorzugte Größe.InformationsquelleAutor Anthea
Swing-Komponenten haben keine Breite oder Höhe bis haben Sie erbracht wurde. Dies tritt auf, wenn Sie anrufen
pack()
odersetVisible(true)
auf einem root-container. Sollten Sie die x y int-Initialisierung-code in diecomponentResized
Methode des ComponentListener, der zusätzlich zu Ihrer JPanel.z.B.,
Werde Sie auch verwenden möchten key bindings eher als ein KeyListener zu erfassen Ihre Tastatureingaben.
danke!
InformationsquelleAutor Hovercraft Full Of Eels
Member-Variablen sind initialisiert, wenn das Objekt erstellt wird (nachdem die Konstruktoren der übergeordneten Klassen & vor-Konstruktor Körper von der aktuellen Klasse. Schwingen Sie nicht tun, jede sizing, wenn das Objekt zum ersten mal erstellt. Daher, wenn Sie anrufen
getWidth()
undgetHeight()
keine Werte gesetzt wurden, noch.Ich bearbeitete Teil. Der Punkt, dass diese Werte nicht gesetzt werden, indem der Konstruktor immer noch wahr. Da die OP erst berechnet werden diese Werte noch einmal an den Anfang, Sie werden nie zum gewünschten Wert.
InformationsquelleAutor unholysampler