2013-12-23 5 views
0

저는 프로그램 작업 중입니다. 나는 패널, 버튼, 레이블 및 텍스트 필드가 들어있는 JFrame을 내부에 만들었습니다. 웬일인지 JFrame이 나타납니다. 코드는 다음과 같습니다.그래픽 요소가 JFrame (Java)에서 작동하지 않습니다.

import javax.swing.*; 
import java.awt.*; 
import java.awt.Event.*; 

public class GUI extends JFrame { 

    JButton rect,oval,tri,free,addPoint; 
    JLabel xLabel,yLabel; 
    JTextField xTextField,yTextField; 
    JPanel leftPanel,rightPanel,optionsPanel,pointsPanel; 

    public GUI(){ 
     initUI(); 
    } 

    private void initUI(){ 

     setLayout(new GridLayout(1,2,5,5)); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setTitle("Graphics Generator"); 
     setSize(500,500); 
     setVisible(true); 

     add(leftPanel); 
     add(rightPanel); 

     leftPanel.setLayout(new GridLayout(2,1,5,5)); 
     leftPanel.add(optionsPanel); 

     optionsPanel.setLayout(new GridLayout(1,4,2,2)); 

     rect = new JButton("Rectangle"); 
     oval = new JButton("Oval"); 
     tri = new JButton("Triangle"); 
     free = new JButton("Free Shape"); 

     optionsPanel.add(rect); 
     optionsPanel.add(oval); 
     optionsPanel.add(tri); 
     optionsPanel.add(free); 

     leftPanel.add(pointsPanel); 

     pointsPanel.setLayout(new GridLayout(1,5,2,2)); 

     pointsPanel.add(xLabel); 
     pointsPanel.add(xTextField); 
     pointsPanel.add(yLabel); 
     pointsPanel.add(yTextField); 
     pointsPanel.add(addPoint); 

    } 

    public static void main(String[] args) { 

     GUI gui = new GUI(); 

    } 

} 

답변

1

패널, 텍스트 필드 또는 레이블이 초기화되지 않았습니다. 나는 받고있다 NullPointerException

아래의 코드는 프로그램을 실행할 것이다. 하지만 당신은 정말 당신이 당신의 구성 요소를 추가 완료 후에는 setVisible(true)를 호출 할 몇 가지 LayoutManagers

private void initUI(){ 
    leftPanel = new JPanel(); 
    rightPanel = new JPanel(); 
    optionsPanel = new JPanel(); 
    pointsPanel = new JPanel(); 

    yLabel = new JLabel(); 
    xLabel = new JLabel(); 

    xTextField = new JTextField(); 
    yTextField = new JTextField(); 

    add(leftPanel); 
    add(rightPanel); 

    leftPanel.setLayout(new GridLayout(2,1,5,5)); 
    leftPanel.add(optionsPanel); 

    optionsPanel.setLayout(new GridLayout(1,4,2,2)); 

    rect = new JButton("Rectangle"); 
    oval = new JButton("Oval"); 
    tri = new JButton("Triangle"); 
    free = new JButton("Free Shape"); 
    addPoint = new JButton("Add Point"); 

    optionsPanel.add(rect); 
    optionsPanel.add(oval); 
    optionsPanel.add(tri); 
    optionsPanel.add(free); 

    leftPanel.add(pointsPanel); 

    pointsPanel.setLayout(new GridLayout(1,5,2,2)); 

    pointsPanel.add(xLabel); 
    pointsPanel.add(xTextField); 
    pointsPanel.add(yLabel); 
    pointsPanel.add(yTextField); 
    pointsPanel.add(addPoint); 

    setLayout(new GridLayout(1,2,5,5)); 
    setDefaultCloseOperation(EXIT_ON_CLOSE); 
    setTitle("Graphics Generator"); 
    setSize(500,500); 
    setVisible(true); 

} 
1

을 조사 할 필요가있다. revalidate()에 대한 호출이있을 때까지는 렌더링되지 않습니다.

구성 요소를 사용하기 전에 구성 요소를 초기화해야합니다.

예 : 다른 구성 요소에 대한

leftPanel = new JPanel(); 
rightPanel = new JPanel(); 
add(leftPanel); 
add(rightPanel); 

를 반복합니다. JComponents가 초기화되지 않은 사용자의

5
  • ,

  • 당신은 JComponents에 이미 볼 JFrame,

  • 당신이 생성자의 끝에 코드 라인 setVisible(true);을 이동해야,

  • 추가 스윙 GUI는 Initial Thread

  • 에 나와야합니다.
관련 문제