2012-08-26 1 views
1

내가 가진 코드를 추가 할 수 있지만, 수직는 설정 버튼을 생성 패널을

enter image description here

을 정렬 지금은 어떻게이 패널에의 JLabel을 추가하지만이 새로운 JPanel을 만들 때, 내가 얻을 수있다 싶어 무엇을 코드를 실행하면 오류가 발생하지만 코드가 충돌을주지는 않습니다. 가능하다면 flowlayout에 버튼을 재배치하고 싶습니다.

내 전체 코드 :

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

public final class CharSearch extends Box { 
    int i = 0; 
    int error = 0; 
    static JPanel panel; 
    String original = "Dinosaur"; 
    String secret = new String(new char[original.length()]).replace('\0', '-'); 

    public CharSearch() { 

     super(BoxLayout.Y_AXIS); 
     for (char i = 'A'; i <= 'Z'; i++) { 
      String buttonText = new Character(i).toString(); 
      JButton button = getButton(buttonText); 
      add(button); 
     } 
     JLabel label = new JLabel(secret); 
     JPanel panel = new JPanel(); 
     panel.add(label); 
    } 

    public JButton getButton(final String text) { 
     final JButton button = new JButton(text); 
     button.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       if (original.indexOf(text) != -1) { 
        JOptionPane.showConfirmDialog(null, 
          "Your word does contain" + text); 
       } else { 
        JOptionPane.showConfirmDialog(null, "There is no" + text); 
       } 
       // If you want to do something with the button: 
       button.setText("Clicked"); // (can access button because it's 
              // marked as final) 
      } 
     }); 
     return button; 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       JFrame frame = new JFrame(); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.add(panel); 
       frame.setContentPane(new CharSearch()); 
       frame.pack(); 
       frame.setVisible(true); 
       new CharSearch(); 
      } 
     }); 
    } 
} 

와 내가

Error Exception가 실행할 때이 내가 오류입니다 : 당신이 정의되지 않은 JPanel의 객체를 추가

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
    at java.awt.Container.addImpl(Unknown Source) 
    at java.awt.Container.add(Unknown Source) 
    at javax.swing.JFrame.addImpl(Unknown Source) 
    at java.awt.Container.add(Unknown Source) 
    at org.informatica.com.CharSearch$2.run(CharSearch.java:50) 
    at java.awt.event.InvocationEvent.dispatch(Unknown Source) 
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source) 
    at java.awt.EventQueue.access$000(Unknown Source) 
    at java.awt.EventQueue$1.run(Unknown Source) 
    at java.awt.EventQueue$1.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source) 
    at java.awt.EventQueue.dispatchEvent(Unknown Source) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.run(Unknown Source) 
+0

에 추가하기 전에 당신이 그것을 인스턴스화되지 panel 전역 변수를 생성 한 동안 UI를 어떻게 보이게 할 것인가? 단순히 'FlowLayout'이 우리의 요구 사항을 이해하는 데 도움이되지 않을 것이라고 말하고 있습니다. – Sujay

+0

모든 버튼이 상단에 정렬되어 있어야하고 레이블이 가운데에 있어야하지만 가운데에 놓여 야합니다. –

답변

4

귀하의 JFrame, 결과는 , Container#add(Component) 문서에 명시된 바와 같습니다.

frame.add(panel); 

당신은 당신의 JFrame의 콘텐츠 창 컨테이너에 추가하기 전에 panel를 인스턴스화해야합니다. 이 때문에이 라인의 년대 NullPointerException를 들어

+0

좋아요. 정의 패널이란 무엇입니까? –

+0

죄송합니다. , 나는 인스턴스화를 의미했다. 'panel = new JPanel()' – Vulcan

3

:

frame.add(panel); 

당신은 예를 들어 우리를 제공 할 수있는 frame

관련 문제