2017-04-07 10 views
-1

이 코드 이름 "Timer1.java"와 JPanel의 클래스 이름으로 JFrame의 클래스에서 "Timer_UI.java"arraylist를 사용하여 jframe에 여러 개의 jpanel을 추가 할 수 없습니다 (각 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 일 수 있습니다. 새 타이머를 만들려면 지금

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); 

: 자세한 내용은 Layout Manager에 스윙 튜토리얼 섹션을 읽고 작업의 예에 의한

시작

그래서 기본적인 논리는 같은이 될 수 있습니다 ActionListner 코드는 다음과 같을 것입니다 :

Timer_UI dis_timer = mul_panels.get(i); 
dis_timer.setMaximumSize(dis_timer.getPreferredSize()); 
timerPanel.add(dis_timer); 
timerPanel.revalidate(); 
timerPanel.repaint();