Mehrere Views zu einem Programm

jimb0p

Erfahrenes Mitglied
Hallo Zusammen,

ich habe eine Anwendung die bereits einen View (JFrame) hat. Jetzt möchte ich über ein Flag das an die main übergeben wird (true/false) einen anderen View verwenden. Wie ist hier die eleganteste Lösung? Denn einfach einen weiteren View erzeugen ist nicht sehr praktisch, ich dachte es wäre vielleicht gut den View nicht von der selbst erstellten Klasse zu sein sondern direkte von JFrame damit ich je nach Flag das Objekt erstellen kann. Allerdings funktioniert das nicht, weil er irgendwie immer ein paar Setter/Getter Funktionen dann casten möchte. Ich würde mich über jeden Tipp freuen, gerne auch ganz andere Ansätze.

Gruß
 
Also da gibt es sicher manigfalltige Möglichkeiten. Da Du dir es mit einem Boolean-Wert bereits ersonnen hast, der der main-Routine als parameter übergeben wird, wirst Du vermutlich eine schnöde Fallunterscheidung (if-else) verwenden wollen, in dem einen Zweig wird der eine in dem anderen wird der andere View (JFrame instanziiert und verwendet.
Eine andere möglicherweise flexiblere Möglichkeit kann sein, dass du den Klassen Namen deines entsprechend anderen JFrame als Argument oder in einem Properties-File mitgibst und mit Class.forName() instanziierst, auf diese Weise kannst Du beliebige Views reinzaubern.
 
Hi,
Ohne das dies ein sonderlich volsltändige Beisiel ist, noch dass ich es getestet habe, vielleicht musst Du es noch compilierfähig machen...
aber der Grundgedanke wäre hier folgernder:
Java:
public class FrameTest
  {
    public FrameTest() throws IOException
    {
      
        Properties myProp = new Properties()
        myProp.load(new FileInputStream(new File("myFolder","myprops.properties")));
      
        String viewProp = myProp.get("view.class");
        JFrame frame = Class.forName();
        //Validate frames that have preset sizes
        frame.validate();
        //Center the window
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        Dimension frameSize = frame.getSize();
        if (frameSize.height > screenSize.height)
        {
            frameSize.height = screenSize.height;
        }
        if (frameSize.width > screenSize.width)
        {
            frameSize.width = screenSize.width;
        }
        frame.setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2);
        frame.setVisible(true);
    }
  }
 
Zurück