mercredi 3 juin 2015

Swing GUI extrem langsam - GUI-Code richtig ausführen

Hallo,

Das hier ist mein erstes GUI Projekt.
Ich habe eine (statisch genutzte) GUI-Klasse mit einer statischen Methode die von einer
anderen Klasse in ihrer main-Methode aufgerufen wird.

Die Klasse enthällt die GUI-Komponenten als statische Attribute und eine innere Klasse
die ActionListener implementiert.

Von diesem ActionListener erzeuge ich im Konstruktor zusammen mit den GUI-Komponenten ein Objekt.

Das Listener-Objekt übergebe ich per add... an mehrere Buttons.
Es führt abhängig vom ActionCommand der Buttonevents per switch-Anweisung unterschiedliche Befehle aus.

In einem Befehl wird ein neuer JLabel erzeugt und dem Fenster hinzugefügt.

Ein ActionEvent soll eine Schrift im Fenster erzeugen was erst nach 10-30 Sekunden passiert und oft nur dann überhaupt erscheint wenn man das Fenster minimiert und dann wieder maximiert.

Woran mag es liegen ? Vielleicht wird der Code in einem nicht geeigneten Thread ausgeführt oder liegt es wirklich an der Art der Implementierung...

Java Code:

  1. public class KundeUI
  2. {
  3.  
  4. //import Anweisungen sind hier weggelassen
  5.  
  6. public static JButton button;
  7. public static JLabel script;
  8. public static JFrame First;
  9. //---------------------------------------------------------------
  10. private static class Watcher implements ActionListener
  11. {
  12. public void actionPerformed (ActionEvent e)
  13. {
  14. String s = e.getActionCommand();
  15. System.out.println(s);
  16. switch(s)
  17. {
  18. case "one": KundeUI.button.setText("gut");
  19. break;
  20. case "sec": KundeUI.script = new JLabel("success");
  21.  
  22. script.setBounds(100, 100,100,100);
  23. First.getContentPane().add(script);
  24. break;
  25. default: KundeUI.button.setEnabled(false);
  26. }
  27.  
  28. }
  29. }
  30.  
  31. public static void token() {
  32.  
  33. Watcher w = new Watcher();
  34.  
  35. First = new JFrame();
  36. First.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  37. First.setSize(800, 600);
  38. First.setVisible(true);
  39. First.setLocationRelativeTo(null);
  40. First.setLayout(null);
  41.  
  42. First.setTitle("First");
  43.  
  44. JLabel test = new JLabel("Erster Text");
  45. First.getContentPane().add(test);
  46. test.setBounds(100, 100, 100, 200);
  47.  
  48. JButton second = new JButton("TEST");
  49. second.setBounds(600, 100, 60, 30);
  50. second.setActionCommand("sec");
  51. second.addActionListener(w);
  52.  
  53. First.add(second);
  54.  
  55.  
  56.  
  57. JButton one = new JButton("one");
  58. one.setBounds(10,10,80,150);
  59. one.addActionListener(w);
  60. one.setActionCommand("one");
  61. JTextField main = new JTextField();
  62. main.setBounds(1, 529, 70, 40);
  63. main.setEditable(true);
  64. main.setBackground(Color.BLUE);
  65. First.getContentPane().add(one);
  66. First.getContentPane().add(main);
  67.  
  68. main.setForeground(Color.RED);
  69.  
  70. button = new JButton("else");
  71. button.setBounds(500, 50, 80, 150);
  72. First.getContentPane().add(button);
  73.  
  74. button.addActionListener(w);
  75.  
  76. //Das ist alles nur testweise zu verstehen
  77. }
  78. }


Andere Klasse

Java Code:

  1. public class Start {
  2.  
  3. public static void main(String[] args) {
  4.  
  5. KundeUI.token();
  6.  
  7. }
  8.  
  9. }


Swing GUI extrem langsam - GUI-Code richtig ausführen

0 commentaires:

Enregistrer un commentaire