我正在尝试将 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/