2013-05-28 3 views
0

나는 스윙이 새로운데 아무도 나를 도와 줄 수 없다.왜 내 라벨이 보이지 않습니까?

내 "라벨"을 표시하지 않고 대신 "패널"클래스에있는 구성 요소 만 표시합니다.

한 가지 더 궁금한 점이 있으면 누구나 LayoutManagers에 대해 설명해 주실 수 있습니까? 2 개 이상의 LayoutManager를 프레임에서 사용할 수 있습니까? 프레임에 대해 나는 FlowLayout을 사용할 것이고 나는 BoxLayout을 사용할 프레임에 JPanel을 추가했다.

import javax.swing.*; 
import java.awt.event.*; 
import java.awt.Graphics; 

public class JForm1 extends JFrame 
{ 
    public JForm1() 
    { 
     init(); 
    } 
    public static void main(String[] args) 
    { 
     JForm1 form = new JForm1(); 
    } 
    public void init() 
    { 
     JFrame frame = new JFrame("My Form 1"); 
     frame.setSize(500,500); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     getContentPane().setLayout(new BoxLayout(this,BoxLayout.PAGE_AXIS)); 
     JLabel label = new JLabel("Enter your Name : "); 
     panel MyPanel = new panel(); 
     frame.getContentPane().add(label); 
     frame.getContentPane().add(MyPanel); 
     frame.setVisible(true); 
    } 
} 
class panel extends JPanel implements ActionListener 
{ 
    JButton submitButton; 
    JTextField text; 
    panel() 
    { 
     this.setLayout(new BoxLayout(this,BoxLayout.Y_AXIS)); 
    } 
    public void paintComponent(Graphics g) 
    { 
     text = new JTextField("Enter Name here"); 
     text.setSize(100,25); 
     submitButton = new JButton("Submit"); 
     submitButton.setSize(50,90); 
     submitButton.setBounds(200, 0, 80, 80); 
     submitButton.addActionListener(this); 
     this.add(text); 
     this.add(submitButton); 
    } 
    public void actionPerformed(ActionEvent event) 
    { 
     if(event.getSource()==submitButton) 
     { 
      System.out.println("The Entered Name is : "+text.getText()); 
     } 
    } 
} 

답변

3

이 무엇입니까?

public void paintComponent(Graphics g) 
{ 
    text = new JTextField("Enter Name here"); 
    text.setSize(100,25); 
    submitButton = new JButton("Submit"); 
    submitButton.setSize(50,90); 
    submitButton.setBounds(200, 0, 80, 80); 
    submitButton.addActionListener(this); 
    this.add(text); 
    this.add(submitButton); 
} 

이 코드는 paintComponent에 상관이 없다. paintComponent은 "구성 요소 페인팅", 즉 직사각형 페인트, 선 그리기, 타원형 채우기 등에 관한 것입니다. 이것은 구성 요소를 추가 할 위치가 절대적으로 아닙니다. 대신 생성자에서 해당 코드를 호출하십시오.

또한, LayoutManager를 사용해야하는 경우 setSize/setBounds/setLocation을 호출하면 쓸모가 없습니다.

몇 가지 더 : 당신이 paintComponent를 오버라이드 (override)하는 경우

  • 하지 필요하지 않은 경우 JFrame이 (여기가 분명히 필요하지 않습니다) 확장 super -method
  • 가 수행 호출해야합니다
  • Java 명명 규칙을 따르십시오 (클래스 이름은 대문자로 시작해야하며 대문자로 시작하는 변수 및 메소드).
  • EDT에서 모든 스윙 관련 코드를 호출해야합니다. SwingUtilities.invokeLater() 블록 내에서 UI를 시작하십시오.
+0

감사합니다. 그것은 도왔다! – Ravitheja

+0

ANSI C와 같은 Java 표준이 있습니까? 어떤 것이 있으면 말해 주시거나 내가 어디에서 찾을 수 있는지 말해 주시겠습니까? – Ravitheja

+0

@Ravitheja 다음은 규약 목록입니다. http://www.oracle.com/technetwork/java/javase/documentation/codeconvtoc-136057.html 특히 명명 규칙 (예 : http : // www. oracle.com/technetwork/java/javase/documentation/codeconventions-135099.html#367 –

1

mypanel의 경우 레이아웃을 FlowLayout으로 변경하십시오.

mypanel.setLayout(new FlowLayout()); 
+0

은 생성자 자체에서는 변경되었지만 사용하지는 않습니다. FlowLayout으로 변경 한 후에도 모양이 변경되지 않습니다. – Ravitheja

+0

try frame.getContentPane(). setLayout(). (new FlowLayout()); –

관련 문제