2017-04-07 15 views
-1

これはコードでは、名前を「Timer1.java」とJPanelのクラス名でのJFrameクラスに「Timer_UI.java」arraylistを使用してjframeに複数のjpanel(各jpanelは同時に実行される別々のタイマー)を追加できません。

ArrayList<Timer_UI> mul_panels = new ArrayList<Timer_UI>(); 
    public void jButton2ActionPerformed(java.awt.event.ActionEvent evt){ 
    Timer_UI d_timer = new Timer_UI(); 
      mul_panels.add(d_timer); 
      Timer_UI dis_timer = mul_panels.get(i); 
      i++; 
      dis_timer.setBackground(Color.white); 
      dis_timer.setBounds(34, 110, 434, 178); 
      add(dis_timer); 
      height = height + 230; 
      setSize(new Dimension(523,height)); 
    } 

アプリケーションの実行アプリケーションの

実行されています。一つだけのJPanelオブジェクトをクリックの上に追加され、再びフレームに追加何らタイマーはありません。

https://i.stack.imgur.com/2SxUC.jpg

+1

あなたのタイトルをより具体的にすることを検討してください。だれかがこれに対する答えを見つけることを考えてください検索エンジンを通じて質問します。 –

+2

問題をコンパイル、実行、デモンストレーションするコードを持つように、最高の[mcve]を試してください。特に60行を超える場合は、プログラム全体を見たいとは思っていませんが、コンパイルして実行する最小のビットにコードを圧縮し、問題に関係のない特別なコードはありませんしかし、あなたの問題をまだ示しています。 –

+0

また、JFrame(実際にはcontentPane)はデフォルトでBorderLayoutを使用していますが、これを変更しないと追加された最後のJPanel(どこに指定されていないか)のみが表示されることを理解していますか? –

答えて

1

setBounds()を使用しないでください、あなたのコンポーネントのサイズを設定します。

スイングはレイアウトマネージャで使用するように設計されています。

さらにタイマーパネルを水平方向に追加する場合は、適切なレイアウトマネージャを使用する必要があります。たぶんBoxLayout、またはGridLayoutです。

の詳細についてはLayout ManagerにSwingのチュートリアルからのセクションを読ん及び実施例による

スタートだから、基本的なロジックのようなものかもしれません:あなたは新しいタイマーを作成したいときに今

JPanel topPanel = new JPanel(new BorderLayout()); 
topPanel.add(label, BorderLayout.PAGE_START); 
topPanel.add(button1, BorderLayout.LINE_START); 
topPanel.add(button2, BorderLayout.LINE_END); 

Box timerPanel = new Box.createVerticalBox(); 

frame.add(topPanel, BorderLayout.PAGE_START); 
frame.add(timerPanel, BorderLayout.CENTER); 

ActionListnerコードは次のようなものになります:

Timer_UI dis_timer = mul_panels.get(i); 
dis_timer.setMaximumSize(dis_timer.getPreferredSize()); 
timerPanel.add(dis_timer); 
timerPanel.revalidate(); 
timerPanel.repaint(); 
関連する問題