2017-11-23 1 views
0

Java에서 작은 게임을위한 menue를 작성하려고합니다. Window 클래스 (JFrame 확장)를 사용하고 다른 화면 (Menue, Game, GameOver 등)에 JPanel을 넣는 것이 좋습니다. JFrame에 직접 버튼과 물건을 넣으면 shwown correct,하지만 JPanel을 JFrame에 넣으려고하면 작동하지 않습니다. 여기에 코드입니다 :jframe에서 jpanel을 표시하는 방법

public class Window extends JFrame{ 



    private final int WIDTH = 800; 
    private final int HEIGTH = 600; 
    private final int QUADRAT = 50; 

    JButton startButton; 
    JButton exitButton; 
    JButton anleitungButton; 
    JLabel gameTitle; 

    public Window() { 
     super("Study Run"); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setLayout(null); 
     setSize(WIDTH, HEIGTH); 
     setResizable(false); 
     getContentPane().add(new MenuePanel()); 
     setVisible(true); 
     setLocationRelativeTo(null); 

    } 

그리고 이것은 내 패널입니다 :

public class MenuePanel extends JPanel{ 

JButton startButton; 
JButton exitButton; 
JButton anleitungButton; 
JLabel gameTitle; 


public MenuePanel() { 
    super(); 
    setBackground(Color.CYAN); 

    gameTitle = new JLabel("StudyRun", SwingConstants.CENTER); 
    gameTitle.setBounds(200, 25, 400, 75); 
    gameTitle.setFont(new Font("Arial", Font.ITALIC, 36)); 
    add(gameTitle); 

    startButton = new JButton("start"); 
    startButton.setBounds(325, 125, 150, 50); 
    add(startButton); 
    anleitungButton = new JButton("anleitung"); 
    anleitungButton.setBounds(325, 200, 150, 50); 
    add(anleitungButton); 
    exitButton = new JButton("exit"); 
    exitButton.setBounds(325, 450, 150, 50); 
    add(exitButton); 

    CloseListener closeListener = new CloseListener(); 
    StartListener startListener = new StartListener(); 
    AnleitungListener anleitungListener = new AnleitungListener(); 
    startButton.addActionListener(startListener); 
    anleitungButton.addActionListener(anleitungListener); 
    exitButton.addActionListener(closeListener); 
} 

나는 내가 볼 프레임을 설정하기 전에 패널을 추가 할 필요가 있다고했다 온라인으로 볼 수있는 유일한 도움이됩니다. 그것은 작동하지 않았다. pack() 또는 revalidate()를 코드의 아무 곳에 나 놓아도 작동하지 않았습니다. 또한 패널을 불투명하거나 눈에 보이게 설정하는 것은 아무 것도하지 않았습니다. 다른 무엇을 시도 해야할지 모르겠다.

답변

4

귀하의 문제는 여기에 있습니다 :

setLayout(null); 

당신이 널 (null) 레이아웃을 사용 당신 코더는 위치 와 크기 추가 된 모든 구성 요소의에 대해 완전히 책임이 있습니다.

훨씬 더 나은 해결책 MenuePanel에게 크기 나 범위를 제공합니다 : 귀하의 추가 요소가 더 크기와 0에 아주 기본값 0

A (나쁜) 솔루션이 없습니다 (배우고 레이아웃 매니저를 사용하는 모든 같은 가장 확실하게 이미 말한 검색).

+0

가 대단히 감사합니다

class MyFrame{ add(new SomePanel().getPanel()); 

} .. JFrame의 추가 할 수 있습니다. BorderLayout이 가장 좋은 화면 유형이 여러 개 있기 때문에? 내 menue는 중간에 3 개의 수직 정렬 버튼이 있습니다. 게임은 게임 패널이고 gameoverscreen은 하단에 버튼이 있고 중간에 텍스트가 있습니다. – N00bine

+1

@ N00bine : 모든 크기에 맞는 레이아웃이 없습니다. 보통 복잡한 레이아웃을 간단하게 구현하기 위해 자체 레이아웃 관리자를 사용하는 JPanels를 중첩합니다. 튜토리얼을 공부하십시오. –

+1

@ N00bine : 또한 시간의 90 %, 내 * 주 * JPanel은 BorderLayout을 사용합니다. –

0

Java는 Flowlayout()을 기본값으로 사용합니다. 서로 다른 클래스가 게터를 사용에서 JFrame의에 추가 할 다른 클래스와 패널을 사용하려는 경우

public Window() { 

    setLayout(new FlowLayout()); 
} 

그래서 당신은 기본적으로 이전 answer.Also 설명 NULL로 레이아웃을 덮어

class SomePanel{ 
public JComponent getPanel(){ 
return panel; 
} 
} 

그런 다음

관련 문제