2009-05-15 4 views
1

Ich entwickle gerade ein Taschenrechner-Panel mit Java Swing. Es ist jedoch eine extreme SCHMERZ, alle Tasten zu gruppieren, da sie immer die Größe ändern und neu positionieren, wenn ich eine neue Taste hinzufüge oder die Größe einer Taste ändere.Können Sie die Position von Objekten auf einem Java Swing-Panel beibehalten?

Gibt es eine Art von Layout oder etwas, das die Schaltflächen in Position "sperren" kann, so dass sie nicht betroffen sind, wenn ich andere Schaltflächen verschiebe/skaliere/hinzufüge?

Danke, Bob

+0

GridLayout? GridBagLayout? Ich bin mir nicht sicher, ob ich die Frage genau verstehe. Wie bewegen sich die Knöpfe und ändern sich die Größe? –

Antwort

0

Sie GridBagLayout nutzen könnten sie in einem Raster zu halten, aber es ihnen ermöglichen

1

Ich schlage vor, statt das Hinzufügen und Entfernen-Taste, um die Größe, Sie ihre Sichtbarkeit Eigenschaft ändern (setVisible). Einige Layout-Manager ignorieren nicht sichtbare Komponenten. Daher müssen Sie möglicherweise eine nicht-opqaue (oder übereinstimmende Hintergrundkomponente) an der gleichen Position hinzufügen, die den bevorzugten/minimalen/maximalen Größen der ursprünglichen Komponente folgt. Einfacher können Sie OverlayLayout verwenden.

3

ERWEITERT was Tom sagte ...

eine Komponente zu ermöglichen, sich unsichtbar zu machen noch seinen Platz zu halten, können Sie es in einem Cardlayout zusammen mit einem leeren Label und nur Swap, die sichtbar ist.

Sie können eine Klasse erstellen, um dies für Sie zu tun, wie folgt Das Haupt zeigt nur ein Beispiel, wo, wenn Sie auf eine Schaltfläche klicken, es gelöscht wird, während seine Position beibehalten wird. Ich gebe showComponent/hideComponent und setVisible (t/f) - hängt von der Art, die Sie mögen.

Dies ist möglicherweise nicht genau das, was Sie suchen, aber könnte ein nützliches Stück für einen Teil Ihrer Anwendung sein.

public class Placeholder extends JPanel { 
    private static final long serialVersionUID = 1L; 
    private CardLayout cardLayout_; 
    public Placeholder(JComponent component) { 
     cardLayout_ = new CardLayout(); 
     setLayout(cardLayout_); 
     add(component, "visible"); // the component 
     add(new JLabel(), "hidden"); // empty label 
    } 
    public void showComponent() { 
     cardLayout_.show(this, "visible"); 
    } 
    public void hideComponent() { 
     cardLayout_.show(this, "hidden"); 
    } 
    public void setComponentVisible(boolean visible) { 
     if (visible) 
      showComponent(); 
     else 
      hideComponent(); 
    } 
    public static void main(String[] args) { 
     JFrame f = new JFrame(); 
     f.setLayout(new GridLayout(2,0)); 
     for (int n = 1; n < 10; n++) { 
      JButton b = new JButton(n + ""); 
      final Placeholder placeholder = new Placeholder(b); 
      f.add(placeholder); 
      b.addActionListener(new ActionListener() { 
       @Override 
       public void actionPerformed(ActionEvent e) { 
        placeholder.hideComponent(); 
       } 
      }); 
     } 
     f.pack(); 
     f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
     f.setVisible(true); 
    } 
} 
+0

Das funktioniert! Wie mache ich das JLabel transparent, so dass nichts angezeigt wird, wenn die Komponente ausgeblendet ist? – ATOzTOA

+0

Ignoriere meine Frage, der Platzhalter hatte einen undurchsichtigen Hintergrund :) – ATOzTOA

0

ERWEITERN, was die anderen gesagt ...

Statt die Komponenten unsichtbar zu machen, können Sie diese auch deaktivieren ...
Natürlich hängt es von Ihrer Anwendung und Ihre Präferenzen.

Neben den oben genannten Layouts gibt es einige frei verfügbare, wie TableLayout und das vielseitige MigLayout.

0

Wahrscheinlich hängt es von der Entwicklungsumgebung ab, die Sie verwenden.

In Netbeans können Sie mit der rechten Maustaste auf den Steuercontainer (Formular/Panel) klicken und aus einer Reihe von Layoutoptionen auswählen. Mit 'Absolutes Layout' können Sie die Steuerelemente positionieren, ohne dass sie alle automatisch in der Größe geändert werden, obwohl Sie die Steuerelemente nicht übereinander platzieren können.

0

Ich empfehle Ihnen, A Visual Guide to Layout Managers zu überprüfen. Je nach Aussehen und Funktionalität gibt es verschiedene Layouts, die für Sie funktionieren könnten. Wenn das Hauptproblem die Größenänderungsoperation ist (von dem übergeordneten JFrame o JPanel nehme ich an), können Sie mit der Spring Layout Einschränkungen bezüglich der relativen Position von Komponenten festlegen.

Verwandte Themen