Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Habe mit dem Visual Editor eine Oberfläche gestaltet. Bei einer neuen Instanz möchte ich dass das Bild in der mitte des Bildschirmes erscheint. Deshalb habe ich den Konstruktor folgendermaßen anpassen wollen:
Nein. Keine Ahnung wo bei dir diese Methoden aufgerufen werden. Du kannst ansonsten show() (heisst die Methode show()?) überschreiben und nach dem Aufruf von super.show() einfach noch setLocation machen. Oder bei paint()...
bei mir gehts auch vor pack(), show() oder besser setVisible(true),
ein Gesamtprogamm von Beginn bis Ende wäre interessant, wer weiß was noch an automatisch erstellten Code dazukommt
Java:
public class Test {
public static void main(String[] args) {
AnmeldungUI ui = new AnmeldungUI();
ui.pack();
ui.setVisible(true);
}
}
class AnmeldungUI extends JFrame {
public AnmeldungUI() {
this.setLocation(200, 500);
initialize();
}
private void initialize() {
this.setSize(300, 200);
this.setTitle("Anmeldung");
}
}
Nein er braucht nicht nach pack() die Methode Location aufrufen.
Es geht schon vorher , indem er die Einstellungen in seinem Builder macht.
Der Konstruktor bekommt die methode ini() welche als erste aufgerufen werden muss.
Die initialisiert alle Komponenten.
Danach kann man diverse Einstellungen treffen.
Um nun mit setLocation arbeiten zu können musst du in einer test klasse eine main schreiben.
Da dieses Frame aufrufen eine Instanz kriieren und dann kannst du dieser setLocation hinzufügen.
Andernfalls, klicke in deinen Builder auf das Frame und suche nach den Properties.
Da kannst du auf Center stellen und er richtet dein Frame genau mittig aus , gruß
hab erst seit kurzem mit Visual Editor angefangen, kann mir jemand sagen wozu die Methode initialize ist? Man könnte doch genausogut die setX Einstellungen in Konstruktor packen?
PS: im VE gibt es keine Property-Einstellung für "Center" (jedenfalls find ich keine!)
PS: @Spin ich möchte das aber für jede Instanz übernehmen, nicht in der main definieren
ich hatte mal so ein ähnliches problem und habs gelöst in dem ich eine klasse "centeredframe" geschrieben habe, die ein frame erzeugt der (egal wie groß er ist und welche auflösung vorhanden ist) zentriert wird. jedes fenster erbt dann einfach von dieser klasse und ist zentriert.
Java:
public class CenteredFrame extends JFrame {
private static final long serialVersionUID = 1L;
public CenteredFrame(int x, int y) {
// Beliebiger Inhalt
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
System.exit(0);
}
});
// Größe des Frames
Dimension frameSize = new Dimension(x, y);
// Größe des Bildschirms ermitteln
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
// Position des JFrames errechnen
int top = (screenSize.height - frameSize.height) / 2;
int left = (screenSize.width - frameSize.width) / 2;
// Größe zuordnen
setSize(frameSize);
// Position zuordnen
setLocation(left, top);
// Anzeigen
setVisible(true);
}
}
im konstruktor der abgeleiteten klasse ruf ich denn den konstruktur mit super(x, y) auf und danach initialize() von der abgeleiteten klasse.
Java:
public class MyFrame extends CenteredFrame {
public MyFrame() {
super(400, 400);
initialize();
}
private void initialize() {
...
}
ja so funktioniert das, und wenn ich in der main Klasse mein Objekt mit .setLocation ändere geht das auch....aber warum im Konstruktor nicht? das muss doch möglich sein...
hab erst seit kurzem mit Visual Editor angefangen, kann mir jemand sagen wozu die Methode initialize ist? Man könnte doch genausogut die setX Einstellungen in Konstruktor packen?
Meine persönliche Meinung: Erst garnicht mit GUI-Buildern anfangen. Der Code der dabei erzeugt wird ist manchmal ganz schön grausig.
Code:
myUI.setLocationRelativeTo(null);
platziert das Fenster genau in der Bildschirmmitte.
<edit>
Das sollte allerdings erst gemacht werden, nachdem die Größe fest steht. Wo man das aufruft (ob Konstruktor oder sonst wo) ist egal - am besten direkt vor setVisible(true).
</edit>