2009-05-15 15 views
1

私は現在、Java Swingを使用して電卓パネルをデザインしています。しかし、新しいボタンを追加したり、ボタンのサイズを変えたりする度に、常にボタンのサイズや位置を変更しているので、すべてのボタンを並べるのは極端なPAINです。Java Swingパネル上のオブジェクトの位置を維持できますか?

他のボタンを移動/サイズ変更/追加するときにボタンが影響を受けないように、ボタンを「ロック」するタイプのレイアウトがありますか?

おかげで、 ボブ

+0

GridLayout? GridBagLayout?私は質問を正確に理解しているかどうか分からない。ボタンはどのように動き回っており、サイズが変わっていますか? –

答えて

0

あなたは、グリッドでそれらを保つためのGridBagLayoutを使用しますが、それらは

1

のサイズを変更する可能性があり、私が代わりにボタンの追加と削除を、あなたは彼らの可視性プロパティ(setVisible)を変更示唆しています。一部のレイアウトマネージャは非表示のコンポーネントを無視するため、元のコンポーネントの優先/最小/最大サイズに従うのと同じ位置にnon-opqaue(または一致するバックグラウンド)コンポーネントを追加する必要があります。より単純な場合は、OverlayLayoutを使用します。トムが言った拡張...

をコンポーネントが不可視状態になって、まだその場所を保持できるようにするには

3

、あなたが表示されている空のラベルだけスワップとともにCardLayoutに配置することができます。

これを行うためのクラスを作成するには、次のようにします。メインボタンは、ボタンをクリックするとその位置を保持しながら削除される例を示しています。私はshowComponent/hideComponentに入れて、setVisible(t/f) - 好みのスタイルに依存します。

これは、あなたが探しているものに正確には答えないかもしれませんが、アプリケーションの一部としては役立つかもしれません。もちろん

他の人が言った...

を代わりにコンポーネントが見えなくなって、あなたはまた、それらを無効にすることができますどのような拡張

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

これは機能します!コンポーネントが隠されているときに何も表示されないように、JLabelを透明にするにはどうすればよいですか? – ATOzTOA

+0

私の質問を無視し、プレースホルダは不透明な背景を持っていました:) – ATOzTOA

0

...
、それはあなたのアプリケーションとあなたの好みに依存します。

上記のレイアウトのほかに、TableLayoutや多彩なMigLayoutなど、自由に利用できるものがいくつかあります。

0

おそらく、使用している開発環境によって異なります。

Netbeansでは、コントロールコンテナ(フォーム/パネル)を右クリックして、いくつかのレイアウトオプションから選択できます。 'Absolute Layout'では、コントロールを自動的にサイズ変更せずにコントロールを配置できますが、コントロールを配置することはできません。

0

A Visual Guide to Layout Managersを確認することをおすすめします。あなたが望む外観と機能に応じて、あなたのために働くことができる異なるレイアウトがあります。主な問題が(私が想定している親JFrame o JPanelの)サイズ変更操作の場合、Spring Layoutはコンポーネントの相対的な場所に関する制約を設定することを可能にします。

関連する問題