Variable aus Schleife/Switch benutzen

Q

Queztapotel

Gast
Hallo zusammen

Folgendes, ich habe einen JButton welcher bei Knopfdruck ein Panel einklappt. Dies funktioniert soweit auch ganz gut. Nur will ich es auf zwei ermöglichen. Einerseits durch langsames zugleiten anderseits durch einfaches ausblenden. Nun das Problem: Ich will dass, das Panel an die gleichen Punkt zurückspringt bzw. gleitet an welchem es zuvor war. Die Panelgrösse ist variabel. Nun wird das in beiden Fällen (gleiten/springen) sowie in beide Richtungen (auf/zu) in Schleifen geregelt. Und das ist jetzt der "springende" Punkt, ich will eine Variabel beim zumachen speichern, welches sich merkt wo das Panel war und dann in der Auf-Schleife benutzt um es an die Stelle zurückzuführen. Ich hab das ganze auch mal in einen Switch gepackt in der naiven Hoffnung es dort zum laufen zu bekommen durch eventuell andere Richtlinien was Variablen angeht, aber vergeblich.
Ich hoffe ihr könnt mir helfen.

Gruss
Queztapotel
 

Lexi

Bekanntes Mitglied
Du machst dir eine Variable panelLocation vom Typ Point. Dort speicherst du nach dem Drücken des Buttons die Position des Panels ein (natürlich nur wenn es gerade sichtbar ist und nach dem Drücken verschwinden soll).
Wird der Button jetzt erneut gedrückt, kannst du die Abbruchbedingung deiner Schleife doch mit Hilfe der panelLocation Variable einstellen, ... Wo liegt da das Problem ?
 

Pulma

Mitglied
Hi,
folgendes soll keine Lösung sein, sondern eher eine Art Vorschlag, wie du die eventuell eine Menge Zeit einsparen könntest...
Ich gehe davon aus, dass du in Swing arbeitest. Dort gibt es die Möglichkeit mit SplitPanes zu arbeiten, welche meiner Meinung nach alles bereits implementieren, was du beschrieben hast.
--> How to Use Split Panes (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components)

Edit: Ich ziele deshalb darauf hinaus, weil JSplitPane die Methoden getLastDividerLocation()/getDividerLocation() implementiert, welches auf dein Problem gut passen würde. Divider ist der Trennstrich in der Mitte.
 
Zuletzt bearbeitet:
Q

Queztapotel

Gast
Hi,
folgendes soll keine Lösung sein, sondern eher eine Art Vorschlag, wie du die eventuell eine Menge Zeit einsparen könntest...
Ich gehe davon aus, dass du in Swing arbeitest. Dort gibt es die Möglichkeit mit SplitPanes zu arbeiten, welche meiner Meinung nach alles bereits implementieren, was du beschrieben hast.
--> How to Use Split Panes (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components)

Edit: Ich ziele deshalb darauf hinaus, weil JSplitPane die Methoden getLastDividerLocation()/getDividerLocation() implementiert, welches auf dein Problem gut passen würde. Divider ist der Trennstrich in der Mitte.

Mit denen arbeite ich nun auch danke für den Vorschlag! Doch nun stellt sich die Frage wie ich dafür sorge das LastDividerLocation beim erneuten drücken nicht gleich überschrieben wird? Ich glaube am besten wenn ich den Code mal poste. Und bitte keine Syntaxvorschriften oder sonstige konventionen vorleiern. :>

Java:
private void HideShowButtonMouseClicked(java.awt.event.MouseEvent evt) {                                            
        String SlideHideEffect = ApplicationProperties.instance().getProperty(
                ApplicationProperties.APPLICATION_POSTBOXFRAME_SLIDEHIFEEFFECT);
        int iSlideHideEffect = Integer.parseInt(SlideHideEffect);
        final int DivLoc = mainSplitPane.getDividerLocation();
        int click = 0;
        if (iSlideHideEffect == 1){
             if(DivLoc < 1){
                click = 2;
             }else{
                click = 1;
             }
             if (click == 1){
                        Thread t = new Thread(new Runnable()
                        {
                            public void run()
                            {//point = new java.awt.Point(mainSplitPane.getDividerLocation());


                                for (int x=0; x<DivLoc; x+=5)
                                { final int innerX = x;
                                    SwingUtilities.invokeLater(new Runnable()
                                    {
                                        public void run()
                                        {
                                            mainSplitPane.setDividerLocation(DivLoc-innerX);
                                        }
                                    });
                                    try { Thread.sleep(20); } catch (InterruptedException e) { e.printStackTrace(); }
                                }
                            }
                        });
                        t.start();
                        }else if(mainSplitPane.getLastDividerLocation() == 0){//point.getX() <= 0//point.getX() <= 0
                            Thread t2 = new Thread(new Runnable()
                                {
                                    public void run()
                                    {
                                        for (int y=-1; y<point.getX(); y+=5)
                                        { final int innerY = y;
                                            SwingUtilities.invokeLater(new Runnable()
                                            {
                                                public void run()
                                                {
                                                    mainSplitPane.setDividerLocation(0+innerY);
                                                }

                                            });
                                            try { Thread.sleep(20); } catch (InterruptedException e) { e.printStackTrace(); }
                                        }
                                    }
                                    });
                                    t2.start();
        }else if(leftPanel.isVisible() == true)
            leftPanel.setVisible(false);
        else
            leftPanel.setVisible(true);
        

        //leftPanel.setVisible(true);
        //mainSplitPane.setDividerLocation(180);
        }
    }

Gruss
Queztapotel
 
Q

Quetzapotel

Gast
Sry Code war noch ein bisschen gemixt mit verschiedenen Lösungsansätzen
Hier der richtige
Java:
private void HideShowButtonMouseClicked(java.awt.event.MouseEvent evt) {                                            
        String SlideHideEffect = ApplicationProperties.instance().getProperty(
                ApplicationProperties.APPLICATION_POSTBOXFRAME_SLIDEHIFEEFFECT);
        int iSlideHideEffect = Integer.parseInt(SlideHideEffect);
        final int DivLoc = mainSplitPane.getLastDividerLocation();
        int click = 0;
        if (iSlideHideEffect == 1){
             if(DivLoc < 1){
                click = 2;
             }else{
                click = 1;
             }
             if (click == 1){
                        Thread t = new Thread(new Runnable()
                        {
                            public void run()
                            {//point = new java.awt.Point(mainSplitPane.getDividerLocation());


                                for (int x=0; x<DivLoc; x+=5)
                                { final int innerX = x;
                                    SwingUtilities.invokeLater(new Runnable()
                                    {
                                        public void run()
                                        {
                                            mainSplitPane.setDividerLocation(DivLoc-innerX);
                                        }
                                    });
                                    try { Thread.sleep(20); } catch (InterruptedException e) { e.printStackTrace(); }
                                }
                            }
                        });
                        t.start();
             }else if(DivLoc == 0){//point.getX() <= 0//point.getX() <= 0
                            Thread t2 = new Thread(new Runnable()
                                {
                                    public void run()
                                    {
                                        for (int y=-1; y<DivLoc; y+=5)
                                        { final int innerY = y;
                                            SwingUtilities.invokeLater(new Runnable()
                                            {
                                                public void run()
                                                {
                                                    mainSplitPane.setDividerLocation(0+innerY);
                                                }

                                            });
                                            try { Thread.sleep(20); } catch (InterruptedException e) { e.printStackTrace(); }
                                        }
                                    }
                                    });
                                    t2.start();
        }else if(leftPanel.isVisible() == true)
            leftPanel.setVisible(false);
        else
            leftPanel.setVisible(true);
        

        //leftPanel.setVisible(true);
        //mainSplitPane.setDividerLocation(180);
        }
    }
 

Antoras

Top Contributor
Ich würde mir da zwei Methoden machen - eine für das Aus- und eine für das Einblenden.

Beim Ausblenden musst du die Position des Dividers natürlich außerhalb deiner Methode abspeichern, ansonsten wird die Variable beim Verlassen der Methode ja wieder gelöscht.
Java:
int lastDivLoc;

void hideSplitPane(SplitPane sp) {
  lastDivLoc = sp.getLastDividerLocation();
  // hide sp
}

void showSplitPane(SplitPane sp) {
  // show sp
  // use lastDivLoc
}

Und bitte keine Syntaxvorschriften oder sonstige konventionen vorleiern. :>
Warum? Veträgst keine Kritik? Code-Conventionen sind nicht dazu da jemanden zu schikanieren sondern um den Code besser verstehen zu können. Damit hilfst du nicht nur dir sondern auch denjenigen die den Code später lesen müssen - also auch uns.
Außerdem kommt es oft vor, dass Anfänger Fehler machen, die den Code nicht richtig arbeiten lassen obwohl er sonst eigentlich korrekt wäre.

Deine Threads sind da ein gutes Beispiel.
Java:
for (int x = 0; x < lastDivLoc; x += 5) {
  mainSplitPane.setDividerLocation(lastDivLoc - x);
  try {
    Thread.sleep(20);
  } catch (InterruptedException e) {
    e.printStackTrace();
  }
}
Neue Threads in der Schleife zu erzeugen ist nicht nur ineffizient, es kann auch zu Fehlern führen, bei denen du dich am Schluss wundert warum der Code nicht so funktioniert wie er soll.
 

Queztapotel

Mitglied
Das in zwei Methoden zu gestalten hab ich mir auch schon überlegt. Werde das mal versuchen, melde mich dann wieder. Vielen Dank für die netten Antworten, so macht das Spass hier :toll:

Ja hast ja recht, bin mir das halt von Python gewöhnt. Soll heissen wenn du da was ins Forum schreibst wirst du zuerst 10 Posts lang auf deine Syntax/Konventionsfehler hingewiesen bevor du überhaupt auch nur einen vorschlag bekommst. Aber hier ist das ja wie ich sehe netter. Danke noch wegen dem Hinweis zu den Threads.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D "Automatisierte", variable verschachtele for-Schleife Allgemeine Java-Themen 9
W Variable Initialisierung mit dem Ergebnis einer Regex Allgemeine Java-Themen 1
A Clean Code: Variable vs. Methode Allgemeine Java-Themen 8
J Wo kommt der Wert der Variable her ? Allgemeine Java-Themen 6
E Variablen Nach Übergabe einer Variable den Constructor aufrufen Allgemeine Java-Themen 16
H lokale Variable bei Optional verwenden Allgemeine Java-Themen 11
A Variable in if initialisieren Allgemeine Java-Themen 23
S Variable als Objekt Name Allgemeine Java-Themen 3
T statische Variable und nicht-statische Methode Allgemeine Java-Themen 2
P Variable wird in for - loop nicht richtig hochgezählt Allgemeine Java-Themen 11
A Variablen non-static variable cannot be referenced from a static content Allgemeine Java-Themen 4
A Variable, welche Exeption wirft als "Global" deklarieren Allgemeine Java-Themen 13
A Scanner Variable Klassenimtern deklarieren Allgemeine Java-Themen 12
L Variablen Variable nicht aktualisiert Allgemeine Java-Themen 3
denny86 NetBeans Ordnernamen rekursiv auslesen und in Variable verarbeiten Allgemeine Java-Themen 38
R Variable durch mehrere Methoden ändern und nutzen Allgemeine Java-Themen 17
P Static Variable -> unterschiedliche Werte? Allgemeine Java-Themen 1
C Abstrakte Klasse, lokale Variable-Problem Allgemeine Java-Themen 1
T AWT AWT-EventQueue-0 Null_Pointer_Exception durch Variable Allgemeine Java-Themen 12
M Variable ändern bei jedem Schleifendurchlauf Allgemeine Java-Themen 32
F Wert in Variable schreiben, wenn diese gerade genutzt wird Allgemeine Java-Themen 10
P Prüfen ob es Variable mit Namen gibt der als String übergeben wird Allgemeine Java-Themen 7
S JFrame Variable mitgeben Allgemeine Java-Themen 5
M Variable außerhalb Klasse definierbar? Allgemeine Java-Themen 2
X Bild -> lokale Variable -> DB -> lokale Variable Allgemeine Java-Themen 3
F Aktuelle Variable Allgemeine Java-Themen 2
J String Variable verändert sich plötzlich Allgemeine Java-Themen 8
J private static final String variable Allgemeine Java-Themen 8
A Long variable wird negativ??? Allgemeine Java-Themen 1
reibi Classpath Classpath Variable beim Tomcat Allgemeine Java-Themen 2
M Zeiger auf statische Variable Allgemeine Java-Themen 1
H Klassennamen zum Aufruf eines statischen Feldes aus Variable holen Allgemeine Java-Themen 4
F Variable übergeben?! Allgemeine Java-Themen 2
L Variable auch in der function verfügbar machen? Allgemeine Java-Themen 4
M Collections Typ Variable einer generischen Collection ? Allgemeine Java-Themen 4
P Variablen Variable von void im ActionListener verwenden Allgemeine Java-Themen 3
M Parallele Programmierung: volatile Variable nimmt ungewöhnlichen Wert an Allgemeine Java-Themen 3
iB0T Variable Wert ausrauchen Allgemeine Java-Themen 3
T Variablen Variable wird als nicht genutzt angezeigt Allgemeine Java-Themen 8
S Datentypen Eine Variable von String zu Int ändern Allgemeine Java-Themen 5
Hoppelmann "Variable" in String erkennen Allgemeine Java-Themen 2
B Variable class in java.lang.Object Allgemeine Java-Themen 11
O Variablen Originalname einer übergebenen Variable prüfen Allgemeine Java-Themen 9
X Windows-Environment-Variable per jRegistryKey anpassen Allgemeine Java-Themen 6
P Variable in Array stellen Allgemeine Java-Themen 11
M Arraynamen durch Variable festlegen lassen Allgemeine Java-Themen 5
J Anderem Thread Variable mitgeben Allgemeine Java-Themen 2
nrg Auszulagernder Part, der aber variable Methode/Klasse aufruft Allgemeine Java-Themen 7
I %AppData% Variable für einen Prozess setzen Allgemeine Java-Themen 23
G Variablen Variable extern speichern - wie? Allgemeine Java-Themen 9
M Variablen Wie Variable verfügbar machen? Allgemeine Java-Themen 16
A variable aus einer anderen klasse verändern Allgemeine Java-Themen 5
G Variable Methodenwahl Allgemeine Java-Themen 11
C JFormattedTextField Inhalt einer Variable zuweisen Allgemeine Java-Themen 11
C Variablen Variable einer Klasse in einer anderen Klasse Nutzen Allgemeine Java-Themen 8
B Umgebungsvariable Variable wird nicht übernommen Allgemeine Java-Themen 4
N variable Anzahl von Objektinstanzen zur Laufzeit erstellen Allgemeine Java-Themen 4
C Environment Variable in Pfad -> Datei öffnen Allgemeine Java-Themen 5
algorismi int-variable Value Change event Allgemeine Java-Themen 3
E Variable dynamisch ausgeben Allgemeine Java-Themen 5
trash super() mit Variable bestücken Allgemeine Java-Themen 3
X Cannot refer to a non-final variable settings inside an inner class defined in a different method Allgemeine Java-Themen 4
A Variable Parameterinhalte an einen Query übergeben? Allgemeine Java-Themen 3
B static Variable / Unterklasse Allgemeine Java-Themen 2
J Was ist schneller? Neue Variable oder neuer Wert speziell int Allgemeine Java-Themen 3
S Innere Klasse: Zugriff auf äußere Variable Allgemeine Java-Themen 5
Semox Fehler - Zuweisung aus BufferedReader an Variable Allgemeine Java-Themen 3
Daniel_L RegEx - variable Vorkommen ersetzen? Allgemeine Java-Themen 5
P Unicode-Sequenz (u1234) in Variable speichern und ausgeben Allgemeine Java-Themen 6
G auf variable in anderer class zugreifen Allgemeine Java-Themen 2
G Variable global nutzen Allgemeine Java-Themen 4
V Variable vom Typ String zum Typen "Message" konve Allgemeine Java-Themen 2
J in einer static Variable Wert ändern Allgemeine Java-Themen 6
M Try-Catch: wie wird Variable bei Exception initialisiert? Allgemeine Java-Themen 8
G Speicherverbrauch einer Variable Allgemeine Java-Themen 2
C ArrayList mit Variable im Namen Allgemeine Java-Themen 16
T JNI Referenz auf Variable in Java? Allgemeine Java-Themen 2
G Überprüfen, ob Variable ein Array ist? Allgemeine Java-Themen 5
R Member-Variable erzwingen Allgemeine Java-Themen 17
D LinkedList anhand einer long-Variable der Objekte sortieren Allgemeine Java-Themen 5
M Zugriff auf Objekt, Name in Variable Allgemeine Java-Themen 3
G Problem mit einer Variable Allgemeine Java-Themen 3
O Future Variable Allgemeine Java-Themen 4
M variable übergeben NICHT KOPIEREN Allgemeine Java-Themen 12
loadbrain KeyEvent mit Variable verknüpfen Allgemeine Java-Themen 4
M Prüfen ob Variable vorhanden / initalisiert ist Allgemeine Java-Themen 4
G Variable wird ignoriert - warum ? Allgemeine Java-Themen 36
L ctrl-z wird nicht in Variable gespeichert Allgemeine Java-Themen 4
G Variable Anzahl JTextfleder Allgemeine Java-Themen 3
R Wenn Variable = wat ist Allgemeine Java-Themen 7
H Zugriff auf statische Variable synchronisieren Allgemeine Java-Themen 4
H globale Variable wird nicht überall erkannt Allgemeine Java-Themen 3
G Zugriff auf Variable in abgeleiteter Klasse Allgemeine Java-Themen 6
R Eine Variable an eine Methode mit Array übergeben Allgemeine Java-Themen 7
E Variable in einer Methode Allgemeine Java-Themen 13
O Environment Variable Setzen Allgemeine Java-Themen 2
G Referenz auf Variable! Allgemeine Java-Themen 3
C Variable aus einer Methode einlesen in einer verarbeiten und Allgemeine Java-Themen 6
G 1.5er String.format() -> variable Feldlaenge? Allgemeine Java-Themen 5
S wie übergebe ich eine Variable aus einer Methode an main() ? Allgemeine Java-Themen 16

Ähnliche Java Themen


Oben