Anzeige:
Ergebnis 1 bis 2 von 2

Thema: Umschalten zwischen Bildschirmen

  1. #1
    Registrierter Benutzer Avatar von BlueJay
    Registriert seit
    27.08.2004
    Beiträge
    825

    Umschalten zwischen Bildschirmen

    Hallo Leute,

    hier ist ein Projekt, was ohne Menus auskommen muss, d.h. ich habe in paar nette Bildschirme für die einzelnen Menulatten zu erstellen.

    Diese sollen auf Maus und Keys reagieren, haben mal eine große, mal eine weniger große Anzahl Buttons.
    Swing-Komponenten sollen auf ein Minimum beschränkt werden, Graphics und Graphics2D sind unbeschränkt zugelassen.

    Da gibt es ein Hauptprogramm, was die Ressourcen bereitstellt und die Optionen einstellt.

    Da gibt es ein Hauptauswahlschirm mit 6 Punkten, die 6 Nebenschirme nachladen. Das klappt beim 1.Mal.
    Die Nebenschirme haben je ihr eigenes Mousehandle und Keyhandle, da sie höchst unterschiedlich reagieren.

    Problem:
    solange sie mi Vordergrund bleiben, laufen alle Einstellungen flott und zur vollsten Zufriedenheit.
    Bei Rücksprung in den Hauptauswahlschirm gibt es aber arge Verzögerungen:

    solange man nicht an der Maus rappelt, passiert gar nichts, ebenso, wenn von der Hauptauswahl wieder in einen Nebenschauplatz verzweigt werden soll.

    Code der Schirme beim Rücksprung:

    Code:
     // Hover-Effekt:
     private void mausover(int mx,int my)
      {
        int i, k=-1;
        for (i=0; i<butt.length; i++) if (butt[i].geklickt(mx,my))
        {
           gewaehlt = i;
           repaint();
        }
      }
    
      // Auswahl:
      private void mausklick()
      { 
          if (gewaehlt>=0)
          {
             Main.mach_hinne(screenid,gewaehlt);
             if (gewaehlt<15) repaint();
          }
       }
    
      // Reaktion auf Cursor-Keys, Blanc und Enter
      private void keyhandle(int nr)
      { 
          if (nr==KeyEvent.VK_ENTER) mausklick();
          else if ((nr==KeyEvent.VK_SPACE) || (nr==KeyEvent.VK_RIGHT)) gewaehlt=(gewaehlt+1)%butt.length;
          else if ((nr==KeyEvent.VK_SPACE) || (nr==KeyEvent.VK_LEFT))   gewaehlt=(gewaehlt+butt.length-1)%butt.length;
          repaint();
      }
    Code des Main, der dien Kram verarbeitet:


    Code:
     static void mach_hinne(int scrid,int nr)
     {
         if (scrid==1) switch(nr)
         { case 0: set_screen(0); break;
           case 1: set_screen(2); break;
           case 2: set_screen(3); break;
           case 3: set_screen(4); break;
           case 4: System.exit(0); break;
         }
         if (scrid==3)
         { 
           if (nr<6) set_background(nr);
           // und noch so ein paar Settings  ...  
    
       }
    
    // und hier der Teil, der zwar flott antwortet, aber sich mit dem eigentlichen Ausführen "Zeit lässt":
    
    static void set_screen(int nr)
       { System.out.println("start");
         switch(screenid)
         { case 0: my_frame.getContentPane().remove(showscr); break;
           case 1: my_frame.getContentPane().remove(welcomescr); break;
           case 2: my_frame.getContentPane().remove(patternscr); break;
           case 3: my_frame.getContentPane().remove(optscr); break;
           case 4: my_frame.getContentPane().remove(helpscr); break;
         }
         screenid=nr;
         switch(screenid)
         { case 0: my_frame.getContentPane().add(showscr); break;
           case 1: my_frame.getContentPane().add(welcomescr); break;
           case 2: my_frame.getContentPane().add(patternscr); break;
           case 3: my_frame.getContentPane().add(optscr); break;
           case 4: my_frame.getContentPane().add(helpscr); break;
         }
         my_frame.pack();
         System.out.println("fertig");
       }
    Während des repaint() holen sich die jeweiligen Screens mit requestFocus() den Fokus, sonst klappt das nicht mit dem Keyhandle.

    "Start" und "Fertig" kommen zwar flott hintereinander, aber der neu angewählte Screen erst, wenn man an der Maus gewackelt hat.
    Warum? Muss ich erst das alte Mousehandle abschießen? Den Screen? (Wird nochmal gebraucht!)

    Dumm, wenn es keine Maus gibt! Dann komme ich vom 2. Optionscreen nicht mehr weg!

    Gruß,
    Ulrike
    Geändert von BlueJay (18-01-2012 um 11:48 Uhr)
    Eigentlich ganz einfach, wenn man's weiss!

  2. #2
    Registrierter Benutzer Avatar von BlueJay
    Registriert seit
    27.08.2004
    Beiträge
    825
    Puh, bin ich vernagelt!

    Code:
     switch(screenid)
         { // case 0: my_frame.getContentPane().add(showscr); showscr.repaint();  break;
           case 1: my_frame.getContentPane().add(welcomescr); welcomescr.repaint(); break;
           case 2: my_frame.getContentPane().add(patternscr); patternscr.repaint(); break;
           case 3: my_frame.getContentPane().add(optscr); optscr.repaint(); break;
           case 4: my_frame.getContentPane().add(helpscr); helpscr.repaint();  break;
         }
         my_frame.pack();
    repaint ist natürlich die Lösung! Tja, repaint war diesmal nicht im Thread!

    Gruß,
    Ulrike
    Eigentlich ganz einfach, wenn man's weiss!

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •