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.
Wegen de, setVisibile(true) in der Main Methode wird kein Text in der TextArea angezeigt. Da ich von andere java dateien aus Objekt erstelle von dem Gui kann ich das setVisibile(true) nicht am schluss der Initialisierung machen da sonst jedes mal das ganz GUI aufgebaut wird sobald ich ein Objekt auf dieses mache. Gibt es da irgendwie eine Lösung das setVisibile(true) woanders zu machen damit mir nich jedes mal das ganze gui aufgeht?
Java:
public static void main(String[] args) {
// Maximaler Speicher ausgeben
System.out.println(Runtime.getRuntime().maxMemory());
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
PruefprogGUI inst = new PruefprogGUI();
inst.setLocationRelativeTo(null);
inst.setResizable(false);
inst.setVisible(true);
}
});
}
ja die memory zeigt ich am anfang an... vergesst das!
ich möchte von einer anderen java datei auf methoden
zugreiffen die in der gui java datei sind. jedoch ohne static.
für das mache ich ein objekt auf das gui und kann die public methoden benutzen
. nur öffnet sich jedesmal ein neues gui wegen dem objekt da ich das setvisibile ganz am schluss
der initialisierung machen muss weil sonst kein text
in der textarea angezeigt eird!
Also mir ist nicht ganz klar, was genau dein Problem ist.
Wenn du "irgendwann" Daten "irgendwie" in dein JTextField eingibst, dann werden diese auch angezeigt.
Also, wenn ich mal versuche deinen letzten Text zu verstehen:
Liegt das Problem dann nicht einfach daran, dass du neue Instanzen deiner PruefprogGUI erzeugst?
Du willst vermutlich auf die momentan aktive Instanz deiner GUI zugreifen, richtig?
und nit jedesmal eine neue machen! es zeigt mir mit dem code
von oben eben nichts in der textarea an und auch das bild im jlabel
kommt nicht und dann hab ich im internet gelesen das es sein könnte weil das
setvisibile zu früh aufgerufen wird!
In einem Textfeld des GUI's öffne ich ein neues JFRAME auf dem ich 9 Tasten habe damit man mit einem Touchscreen draufdrücken kann und die Zahl in die Textarena kommt!
Dies funktioniert einwandfrei! Damit ich jedoch zugriff auf das Gui habe mache ich dies:
Java:
PruefProgGUI gui = new GUI();
Jetzt wird also jedesmal eine neue Instanz auf das GUI gemacht, den Konstruktor aufgerufen und somit das GUI ein weiteres mal geöffnet das isch das setVisibile() am schluss habe!
Gibt es für das eine andere möglichkeit?
Anderseits machst du auch in der main das setVisibile und es geht:-(
Nun du musst einfach "irgendwo" eine Referenz auf die Instanz deiner Gui haben.
Entweder hinterlegst du das in deiner Gui Klasse selbst:
Java:
class PruefProgGUI extends JFrame //(nehme ich an)
private PruefProgGUI instance;
public PruefProgGUI ()
{
instance = this;
// hier passiert vielleicht noch was
}
// Mach eine statische Getter-Methode um an die Instanz heranzukommen
public static PruefProgGUI getActiveInstance()
{
return instance;
}
Das erinnert jedoch sehr an ein schwer krankes Singelton, da wäre ein richtiges Singelton sicherer und effizienter.
Oder du sorgst dafür, dass bei der Erstellung der Gui eine Referenz von dem Ersteller aus bleibt.
Sorgt dafür, dass das, was in der run() Methode der Runnable definiert ist, auch auf dem EDT (dem Hauptthread von Java) ausgeführt wird. Da sollten alle Aktionen ausgeführt werden, die die GUi beeinflussen (auch die Erstellung von Grafischen Komponenten).
Jedoch macht es mir immer noch mehrere GUI's auf! Wie muss ich die Instatzen den aufrufen? weil einfach so merken wird das java ja nicht das es die methode mit dem return verwenden soll??
Irgendwie sehen sie den Public nicht und wollen den privaten Konstruktor aufrufen...
Bei Singelton ist der Konstruktor, wie du schon sagtest: private.
Somit kannst du gar keine Instanzen davon erstellen.
Deshalb gibt es eine methode, meist getInstance gennant, die eine Instanz der Klasse zurückgibt:
Java:
class TestKlasse
{
private final TestKlasse INSTANCE = new Instance();
private TestKlasse()
{...}
public static TestKlasse getInstace()
{
return INSTANCE;
}
}