将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");   
}

面板有"just a black screen"的原因是因为你没有添加任何东西,你告诉它有一个黑屏。

panel.setBackground(Color.BLACK);

你从来没有对这些方法中的第一个面板做过任何事情,我可以根据你对第二个"类"(它是一个方法)的表示来假设。这就是为什么它总是黑色的。

你说:

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

每次都创建新的JPanel,并将其命名为panelMain,它们就在该方法中,永远不会离开。您要么需要返回一个JPanel,要么给它一个JPanel作为参数。

程序正在做你让它做的事情。

同样,不能这样比较对象:

eventSource == buttonStart

你应该使用:

eventSource.equals(buttonStart);

最新更新