2011-01-01 20 views
4

単純なCardLayoutを使用してJPanelでMainWindow(JFrame)を使用していますが、CardLayoutにはいくつかのJPanelがあります。NetBeansを使用してJPanelからレイアウトを削除するにはどうすればよいですか?

&ドロップするJPanelsをパレットからCardLayoutにドラッグして、パネルに内容を配置すると問題はありません。しかし、別のJPanelを別々のファイルに配置したいので、NetBeansでJPanelフォームを作成しました。

私はCardLayoutに私の派生JPanelのクラスを入れて、私が今持っているのみ問題、(例えばNetBeansの中から「Beanの選択」機能を使用して)NetBeansは常にから私の元のレイアウトので、パネルのための新しいレイアウトを設定し、 JPanelクラスがオーバーライドされ、空のJPanelがすべて取得されます。

JPanelクラスから単純にレイアウトを削除する方法があるかどうかは知っていますか?つまり、レイアウトを「なし」またはNetBeansで設定することはできません。「Null Layout」に設定すると、「jPanel.setLayout(null);」が呼び出されます。もちろん、setLayoutを呼びたくないのはどういうことでしょうか?

申し訳ありませんが、私はちょうどここで解決策を見つけるためにばかげています。 NetBeansの新機能ですが、コードを手動で変更する方法が必要です。「コードのカスタマイズ」オプションは、「//サブコンポーネントとレイアウトのコード - ここには表示されていません。 ...

ここに私の問題が何であるか理解してくれることを願っています。 :)

+0

ザンダー、あなたは道を見つけましたか?それ?それは一般的な問題でなければなりません。私は彼に同じことに直面している – Snake

答えて

1

これは、GUIビルダーを使用しない主な理由の1つです。あなたはNetbeansのコードに誰かがアクセスできるはずですが、GUIを手作業で再起動することをお勧めします。それはあなたにより柔軟性を与え、あなたがしていることをよりよく理解するでしょう。

+0

おかげで私はすでにこれまでにやっている。しかし、私の問題に対する答えを知っていることは素晴らしいことですが、私はこの問題を抱える唯一の人ではないと思います。 – Xander

+0

申し訳ありませんが、私はもっと役に立ちません。コードを見ずにGUIの問題で何が起こっているのかを知るのは難しいです。 SSCCEは、通常、問題を示すために使用されます。 – jzd

1

むしろ迷惑ですね。あなたの派生JPanelクラスがそのコンストラクタでinitComponent()を呼び出し

した後、それはsetAllowLayoutChange(false);、たとえば、とsetLayout()へのさらなる呼び出しを無効にする可能性が...このようにそれを回避してコードすることができます。

JPanelから派生した共通の基底クラスに次のコードを置き:

protected boolean mAllowLayoutChange; 

/** Creates new form CommonPanel */ 
public CommonPanel() 
{ 
    super(); 
    mAllowLayoutChange=true; 
} 

public void setAllowLayoutChange(boolean b) 
{ 
    mAllowLayoutChange=b; 
} 

@Override 
public void setLayout(LayoutManager mgr) 
{ 
    if(mAllowLayoutChange) super.setLayout(mgr); 
} 
0

を私は同じ問題を持っていたし、それを多くの時間を失いました。拡張クラスに追加されたJLabelを見ることができませんでした。

私は(新...

は、基本的には、クラスのsetLayoutのをロックする。前の回答にaddaptationを使用して、それを解決し、生成されたすべての愚かと削除取り消しPanel1.setLayoutによるNetbeansのデザイナーで信じられないほどの欠陥だと思いますinitComponents後

protected boolean mAllowLayoutChange=true; 

/** Creates new form CommonPanel */ 
public CommonPanel() 
{ 
    initComponents(); 
    //no more layout changes allowed 
    mAllowLayoutChange=false; 
} 

@Override 
public void setLayout(LayoutManager mgr) 
{ 
    if(mAllowLayoutChange) super.setLayout(mgr); 
} 
0

ただ、デフォルトのレイアウトにそれを設定する - 。。何をやってから、コードジェネレータを防ぐ注意、NetBeansはデフォルト/ FlowLayoutの本を呼び出しますが、実際にはそれだけで何もしない...

関連する問題