2015-05-18 8 views
0

Я пытаюсь добавить JPanel в другой JPanel из другого класса. Программа больше не выдает ошибку и все методы запущены, но на новой панели есть черный экран. Базовая версия программы выглядит следующим образом:Добавление JPanel в другой JPanel в другом классе

package ninjadragon; 

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

public class NinjaDragon extends JFrame implements ActionListener{ 

public JPanel panelMain; 
public JPanel panelTurnBase; 

public static void main(String[] args) { 
    NinjaDragon(); 
} 

public static void NinjaDragon() { 
    NinjaDragon frame; 
    frame = new NinjaDragon(); 
    frame.CreateMenuScreen(); 
    JFrame.setDefaultLookAndFeelDecorated(true); 
    frame.setSize(750, 750); 
    frame.show(); 
    frame.setResizable(false); 
    frame.pack(); 
} 

private void CreateMenuScreen() { 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    Container window = getContentPane(); 
    panelMain =new JPanel(); 
    panelMain.setPreferredSize(new Dimension(750,750)); 
    panelMain.setBackground(Color.BLACK); 
    panelMain.setLayout (new FlowLayout()); 
    window.add(panelMain); 
    PanelTop(); 
    PanelButtons(); 
    PanelIcon(); 
} 

@Override 
public void actionPerformed(ActionEvent event) { 
    Object eventSource = event.getSource(); 

    if (eventSource == buttonStart) { 
     panelMain.removeAll(); 
     TurnBase TB = new TurnBase(); 
     TB.CreateTurnBase(); 
    } 
} 

Другой класс выглядит примерно так:

public void CreateTurnBase() { 
    panelMain=new JPanel(); 
    panelTurnBase =new JPanel(); 
    setLayout(new FlowLayout()); 
    setPreferredSize(new Dimension(750,750)); 
    setBackground(Color.BLUE); 
    panelTurnBase.setLayout (new FlowLayout()); 
    panelMain.add(panelTurnBase); 
    System.out.println("1"); 
    PanelTurnBaseTop(); 
    PanelGameScreen(); 
    PanelTurnBaseBottom(); 
    repaint(); 
    revalidate(); 
    buttonAttack = new JButton("Attack"); 
    buttonAttack.addActionListener(this); 
    panelTurnBase.add(buttonAttack); 
    System.out.println("2"); 
} 
+0

CreateTurnBase это метод не является классом? –

+1

1) Чтобы лучше помочь, опубликуйте [MCVE] (http://stackoverflow.com/help/mcve) (минимальный полный проверяемый пример) или [SSCCE] (http://www.sscce.org/) (Short , Self Contained, Правильный пример). 2) Всегда копировать/вставлять ошибку и вывод исключений! 3) Используйте логическую и согласованную форму отступов и блоков кода. Отступы предназначены для того, чтобы поток кода стал проще следовать! –

ответ

1

Причина панель имеет «просто черный экран» является потому, что вы не добавить что-нибудь это, и вы скажите, чтобы он имел черный экран.

т.е.

panel.setBackground(Color.BLACK);

Вы никогда не делать ничего, что первая панель внутри любого из этих методов, которые я могу предположить, основываясь на вашем представлении вашего второго «класса» (это метод). Поэтому он остается черным.

Вы говорите:

panelMain=new JPanel(); 
panelTurnBase =new JPanel(); 

Вы создаете новый JPanel s каждый раз и просто называть их panelMain и они просто сидят внутри этого метода, никогда не оставляя. Вам нужно либо вернуть JPanel, либо дать ему JPanel в качестве аргумента.

Программа делает именно то, что вы говорите ей.

Также, не сравнивать объекты, как это:

eventSource == buttonStart

Вы должны использовать:

eventSource.equals(buttonStart);

Смежные вопросы