2013-04-26 10 views
0

응용 프로그램에서 작업 중이며 초기 단계에서 멈추었습니다. JPanelJTextField이 있고 JFrame에 있습니다. JTextField이 (가) 없습니다. 사용하는 경우스윙 구성 요소가 표시되지 않습니다.

JPanel p0 = (JPanel) f.getContentPane(); 

작동합니다. 하지만

JPanel p0 = new JPanel(); 
f.add(p0); 

와 함께 그래서 문제는 다음과 같습니다

  1. 왜 필드는 표시되지 않습니다? (가장 중요한 q)
  2. 앞서 언급 한 두 가지 접근 방식의 차이점은 무엇입니까?

코드 : 말씀 드리지만

import java.awt.*; 
import java.io.*; 
import java.net.*; 
import java.util.*; 
import javax.swing.*; 

public class Main 
{ 

    static Font fontDefault = new Font("arial", Font.PLAIN, 15); 

    public static void main (String [ ] args) 
    { 
     JFrame f = new JFrame("Liquid"); 
     f.setSize(new Dimension(840, 400)); 
     //f.setIconImage(image); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     //JPanel p0 = (JPanel) f.getContentPane();// is it necessary? 
     JPanel p0 = new JPanel(); 
     p0.setLayout(null); 
     JPanel p1 = new JPanel(); 
     p1.setLayout(null); 

     JTextField tfHostName = new JTextField("default text", 20); 
     tfHostName.setBounds(50, 50, 200, 25); 
     tfHostName.setFont(fontDefault); 

     JButton bRequest = new JButton("request"); 
     JButton bReset = new JButton("reset"); 

     JTextArea taTest = new JTextArea("default text", 1, 20); 
     p0.add(tfHostName); 
     f.add(p0); 

     f.add(p1); 

     p0.add(taTest); 
     //f.pack(); 
     f.setResizable(false); 
     f.setVisible(true); 

    } 
} 

:

그것은 JPanel p0 = (JPanel) f.getContentPane(); 와 함께 작동하지만 ID는 내가 더 편안 해요 두번째 접근하지 않는 이유는 무엇입니까? 또한 두 번째 패널을 추가하는 방법과 각 패널의 구성 요소를 자동 정렬하는 방법은 무엇입니까?

업데이트 : 내가 어떤 좌표/위치를 지정하지 않은 아마 때문에 코드가 처음에 작동하지 않았다는 것을 깨달았다

...

+3

더 나은 도움을 더 빨리 JPanel p0 = new JPanel()에 관한 [SSCCE] (http://sscce.org/), 짧고, 실행 가능한, 컴파일 가능한 게시물을 게시하십시오. f.add (p0); – mKorbel

+0

EDITED. 코드 추가. 나는 처음부터이 작업을하고 싶었지만 문제는 그들의 표준에 의해 좋지 않다는 것을 말해 주었다. – mireazma

+0

'앞서 언급 한 두 가지 접근법의 차이점은 무엇인가? '- 첫 번째 접근법은 기본 layot ​​manger . 두 번째 방법은 레이아웃 관리자를 사용하지 않습니다. null 레이아웃을 사용하지 마십시오! setBounds()를 사용하지 마십시오! 초보자는 항상 null 레이아웃으로 놀고 작동하지 않을 때 불평하는 이유는 무엇입니까? 이 포럼에 게시 한 모든 예제 코드는 레이아웃 관리자를 사용합니다. null 레이아웃을 사용하는 코드를 어디에서 얻을 수 있습니까? 나의 조언은 그 웹 사이트를 무시하는 것이다. – camickr

답변

0

편집 :

f.setLayout(new FlowLayout()); 

또한 및 COMME을 프레임에 레이아웃을 설정해야합니다 -이 :이 설정를 havent 이

JFrame jf=new JFrame(); 
Jpanel jp=new JPanel(); 
jp.add(new TextField()); 
jf.add(jp); 

set jf.setVisible(true); 
+0

나는 스 니펫에서 내가 한 것과 같다고 생각한다. – mireazma

+0

지금 확인하십시오 ... !! – anshulkatta

+0

사실. 내가 체크하고 JFrame의 기본 레이아웃은 "테두리가있다"* JTextField를 표시하지 않는 * 이유로 *. – mireazma

3

먼저 당신이 당신의 layoutmangager에 패널을 추가해야처럼 NT 밖으로

//p0.setLayout(null); 
//p1.setLayout(null); 

는 마십시오.

STH 다음

add(p0); 

처럼 당신이이 개 패널을 원하는 경우 JFrame의

pack(); 

의 팩에 대한 호출이 필요합니다, 당신은 당신의 프레임에 그들에게 위치를 제공해야/레이아웃 매니저.코드의 당신의 2 개 사이의 차이에 관한

setPreferredSize(Dimension D); 
setMinimumSize(Dimension D); 
setMaximumSize(Dimension D); 
+0

+1은'pack()'에 대해 +1합니다. 좋은 조언, 문제가 무엇이든간에! –

+0

도 작동하지 않습니다. 나는 그것이 더 크지 않고 작지 않은 크기로 프레임을 원한다. pack()을 사용하면 840 x 400 대신 100 x 10 픽셀로 축소됩니다. – mireazma

+0

레이아웃 관리자 객체를 만든 다음 mgr.add (p0)와 같은 smth를 호출한다는 의미입니까? 그런 다음이를 프레임에 추가하는 방법은 무엇입니까? 저는 초보자입니다. – mireazma

0

: JFrame 실제로있는 contentPane을 가지고

f.add(pane1, BorderLayout.WEST); 
f.add(pane2, BorderLayout.EAST); 

당신은 3 컴포넌트의 크기를 설정하는 possibilites이 패널의 모든 요소가 발생하는 패널 - 프레임에는이 패널 만 있고 다른 패널에는 없습니다. f.setContentPane(randomJPanel);으로 전화하면 실제로 원하는 패널에 contentPane을 설정할 수 있습니다. 이 contentPane에서 레이아웃 작업을하고 JFrame에서 직접 물건을 처리하지 않는 것이 좋습니다.

+2

* "TextField에 관해서는'.setVisible (boolean)'메서드를'true'로 호출했을 때만 볼 수 있습니다."* 텍스트 필드에서'.setVisible (true)'를 호출 할 필요가 없었습니다 - ***이제까지***! –

+0

프레임에 2 개의 패널이 필요합니다. – mireazma

+0

사용 레이아웃 - 그들이 무엇을위한 것입니까 – LionC

관련 문제