java - 将 JPanel 添加到不同类中的另一个 JPanel

标签 java swing class 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");   
}

最佳答案

面板“只是黑屏”的原因是因为您没有向其中添加任何内容,并且您告诉它有一个黑屏。

panel.setBackground(Color.BLACK);

您实际上从未对任何这些方法中的第一个面板执行任何操作,我可以根据您对第二个“类”(它是一个方法)的表示来假设这一点。这就是为什么它保持黑色。

你说:

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

您每次都会创建新的 JPanel,并将它们称为 panelMain,它们就位于该方法内部,永远不会离开。您需要返回一个 JPanel 或为其提供一个 JPanel 作为参数。

程序完全按照您的指示执行。

另外,不要不要像这样比较对象:

eventSource == buttonStart

您应该使用:

eventSource.equals(buttonStart);

关于java - 将 JPanel 添加到不同类中的另一个 JPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30307910/

相关文章:

java - 更改 session 变量而不重新加载页面

java - 具有数组类型的 getClass 方法 Java

c++ - 初始化后的 vector at() 超出范围错误

java - Java 中类似 JSON 的对象语法

java - Sonar : Members of Spring components should be "@Autowired"

java - 将语言映射到范式

java - 处理语言、java程序中识别字符串的堆栈

java - 为什么我的框架是空的?

swing - 防止 Swing 对话框通过点击/触摸外部自行解散

Java - 如何调整 GroupLayout 中的组件大小