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
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:
publicclassCenteredFrameextendsJFrame{privatestaticfinallong serialVersionUID =1L;publicCenteredFrame(int x,int y){// Beliebiger InhaltaddWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEvent we){System.exit(0);}});// Größe des FramesDimension frameSize =newDimension(x, y);// Größe des Bildschirms ermittelnDimension screenSize =Toolkit.getDefaultToolkit().getScreenSize();// Position des JFrames errechnenint top =(screenSize.height - frameSize.height)/2;int left =(screenSize.width - frameSize.width)/2;// Größe zuordnensetSize(frameSize);// Position zuordnensetLocation(left, top);// AnzeigensetVisible(true);}}
im konstruktor der abgeleiteten klasse ruf ich denn den konstruktur mit super(x, y) auf und danach initialize() von der abgeleiteten klasse.
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>