nonmodal JDialog wird nicht richtig angezeigt ...
-
Ich habe gerade das Problem, dass ich gerne den Status (Fortschritt) meines Programms anzeigen möchte. Also, ich 'nen JDialog mit Thread (implements Runnable - bzw. hab den Thread jetzt nochmal in 'ne eigne Klasse geschrieben zwecks Fehlersuche) erstellt und den Fortschritt im der Mainclass per static Variablen abgefragt ... Mein Problem ist nun folgendes, sobald ich den JDialog (hab's auch schon mit JFrame versucht) nicht als modal deklariere, werden die Komponenten erst nach Ablauf des Mainprogramms sichtbar. Habe versucht erst den JDialog aufzurufen, dann den Thread zu starten, sowie den JDialog aus dem Thread zu starten. Hat alles nichts geholfen ...
Edit: Interessant sind der Anfang der void go() und die Klassen Progress, Th.
Außerdem ist mir aufgefallen, dass der JDialog (ohne children) ein
komisches awt-Grau hat ...
Edit: Achja die Kommentare stimmen nicht mehr so ganz, da ich eine ältere
Version überarbeite ...siehe unten!
-
Wohl alle unterwegs am Freitagabend
-
Hat nur keiner Bock sich 17 Seiten Code durchzulesen...
Solltest den schon auf das wichtigste beschränken...
-
Ok Ok, ich dachte der Hinweis auf die für mein Problem relevanten Methoden und Klassen sei genug, aber hier nochmal komprimiert (die beiden Klassen werde ich trotzdem komplett posten, da sie zu relevant für Verkürzungen sind):
//main extends JFrame (new Th(this, filename)).start();
class Progress extends JDialog implements ActionListener { JLabel progressType = new JLabel(); JProgressBar progressBar = new JProgressBar(); JButton done = new JButton("Fertig"); public Progress(JFrame owner) { super(owner, "Fortschritt"); setDefaultCloseOperation(DISPOSE_ON_CLOSE); Container cp = getContentPane(); int width = 300; int height = 115; setSize(width, height); setResizable(false); progressBar.setValue(0); progressBar.setStringPainted(true); cp.setLayout(null); progressType.setBounds(10,10,275,20); cp.add(progressType); progressBar.setBounds(10,35,275,20); cp.add(progressBar); done.setEnabled(false); done.addActionListener(this); done.setBounds(50,60,195,20); cp.add(done); setVisible(true); System.out.println("done"); } public void actionPerformed(ActionEvent aEvent) { dispose(); } } class Th extends Thread { Progress prog; JFrame owner; String filename; public Th(JFrame owner, String filename) { this.owner = owner; this.filename = filename; } public void run() { try { prog = new Progress(owner); prog.progressType.setText(filename+": reading"); int progressTypeCount = 0; while(!Codeformat310.done) { prog.progressBar.setMaximum(Codeformat310.maxData); while(prog.progressBar.getPercentComplete() != 1.0) { prog.progressBar.setValue(Codeformat310.progress); } progressTypeCount++; switch(progressTypeCount) { case(1): prog.progressType.setText(filename+": creating backup"); break; case(2): prog.progressType.setText(filename+": deleting blanks"); break; case(3): prog.progressType.setText(filename+": creating new blanks"); break; case(4): prog.progressType.setText(filename+": writing to file"); } } prog.done.setEnabled(true); } catch(Exception ex) { prog.dispose(); } } }
Zu lang? Was soll ich wegeditieren?
MFG John
-
Also ich habe meine GUI jetzt geändert, in der Hinsicht, dass meine JProgressBar im Mainframe sichtbar wird und in nem Runnable der Mainclass aktualisiert wird, leider weiß ich immer noch nicht, warum es in einem neuen JFrame / JDialog nicht läuft ... Weiß es niemand, oder ist die Frage so dumm, dass es niemand beantworten will?
-
<up>
Sorry für das gespamme, aber ne Antwort würde mich immer noch interessieren ...