11

私は再びJavaに入ろうとしています(数年経ちました)。JavaでGUIコーディングを実際に行ったことはありません。私はこれを始めるために Netbeans を使ってきました。

仕事で C# で winforms を使用する場合、usercontrols を使用して UI の一部を作成し、それらをフォームに動的に追加します。

私はJPanelsC#でユーザーコントロールのように使用しようとしています。JPanelというフォームを作成しましたBlurbEditor。これにはいくつかの簡単なコントロールがあります。ボタンイベントの実行時に別のパネルに追加しようとしています。

これが私がうまくいくと思ったコードです:

mainPanel.add(new BlurbEditor());
mainPanel.revalidate();
//I've also tried all possible combinations of these too
//mainPanel.repaint();
//mainPanel.validate();

残念ながら、これは機能していません。私は何を間違っていますか?

4

6 に答える 6

17

私はそれを考え出した。ここで受け入れられた回答の下のコメントはそれを説明しています: 動的に追加された JTable が表示されない

基本的に、 mainPanel.add() の前に次を追加しました

mainPanel.setLayout(new java.awt.BorderLayout());
于 2008-10-04T06:13:53.517 に答える
5

Swing/AWTコンポーネントは通常、何かを追加する前にレイアウトを持っている必要があります。そうしUIないと、サブコンポーネントを配置する場所がわかりません。

BFreeman はBorderLayout、どれが最も使いやすく、親の上、下、左、右、または中央に「接着」できるかを提案しています。

親の上部に左から右にコンポーネントを追加し、最後に到達すると新しい行にラップしますFlowLayouttextarea

これGridBagLayoutは、把握することが不可能であることで常に悪名高いですが、必要なほとんどすべての制御を提供します。HTMLrowspan、colspan、width、height 属性の奇妙な組み合わせで見たテーブルに少し似ています。

于 2008-10-04T11:02:31.203 に答える
0

私は同様の問題を扱っていました。実行時にパネルに含まれるパネルを変更したかったのですが、
いくつかのテスト、再テスト、および多くの疑似アルゴリズムの失敗の後、これは次のとおりです。

parentPanel : 削除したいパネルが含まれていますchildPanel :
切り替えたいパネル parentPanelLayout :
parentPanel のレイアウト
editParentLayout() : 毎回異なる childPanel と新しい parentPanelLayout で parentPanel を構築します

parentPanel.remove(childPanel); 
editParentLayout();
parentPanel.revalidate();
parentPanel.repaint();
于 2013-10-26T08:03:48.390 に答える
0

すべてのスイング コードと同様に、イベント ディスパッチ スレッド内で GUI 更新を呼び出すことを忘れないでください。このような更新を行う必要がある理由については、これを参照してください

// Do long running calculations and other stuff outside the event dispatch thread
while (! finished )
  calculate();
SwingUtilities.invokeLater(new Runnable(){
  public void run() {
    // update gui here
  }
}
于 2008-10-04T09:16:37.907 に答える
0

mainPanel.add(新しい BlurbEditor());

mainPanel.validate();

mainPanel.repaint();

于 2010-10-22T05:22:05.537 に答える
-1

試しmainPanel.invalidate()てから、必要に応じてmainPanel.validate(). イベントディスパッチスレッドでこれをすべて行っていることを確認することも価値があるかもしれません。

于 2008-10-04T05:35:13.563 に答える