如何将 JPanel 实例传递给另一个 class?

How to pass JPanel instance to another class?

我正在努力显示我在另一个 class 中创建的 JPanel 个实例。

我可以从另一个 class 中提取,但我想要 JButton 位于我 BorderLayout.NORTH;我只想画到我的 mainGame,即 BorderLayout.CENTER。 我不确定如何实现这一点。

import javax.swing.*;
import javax.swing.event.*;
import java.awt.event.*;
import java.awt.*;
import java.awt.image.*;
      
public class RPGClicker {
         
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                mainGameScene();
            }
        });
    }
      
    private static void mainGameScene() {
        JFrame window;
        mainGamePanel mainGameInstance;
        statusPanel statusInstance;
        playerInfoPanel playerInfoInstance;
        navBarDisplayPanel navBarDisplayInstance;
            
        window = new JFrame("RPGClicker: An Unknown Quest!");
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setLayout(new BorderLayout());
            
        mainGameInstance = new mainGamePanel();
        statusInstance = new statusPanel();
        playerInfoInstance = new playerInfoPanel();
        navBarDisplayInstance = new navBarDisplayPanel();
            
        window.add(mainGameInstance, BorderLayout.CENTER);
        window.add(statusInstance, BorderLayout.SOUTH);
        window.add(playerInfoInstance, BorderLayout.EAST);
        window.add(navBarDisplayInstance, BorderLayout.NORTH);
            
        window.pack();
        window.setLocationRelativeTo(null);
        window.setVisible(true);
    }
}

我可以画画 mainGamePanel,但现在我只能在我的其他面板上画画;不过我希望它们包含文本字段和 JButton。

import javax.swing.*;
import javax.swing.event.*;
import java.awt.event.*;
import java.awt.*;
import java.awt.image.*;
      
class navBarDisplayPanel extends JPanel {   
         
    JButton yourStory;
         
    public Dimension getPreferredSize() {
        return new Dimension(1280, 256);
    }
      
    private void navBarDisplayPanel() {
        yourStory = new JButton("Your Story");    
        add(yourStory);
    }
}

代码可以编译,但在 运行 时什么也没有出现。北边的酒吧完全是空的。任何人都可以提供任何想法吗?

我假设是这样的:

private void navBarDisplayPanel()

是您认为 class navBarDisplayPanel 的构造函数的真实情况。

作为一个构造函数,如果你想从外部classes创建对象,你不应该让它成为私有的,你应该删除void标记,因为这不是一个常规方法, 和(可选但不是可选的)你应该命名你所有的 classes(和它们的构造函数)首字母大写。

为了使您的代码正常工作,我想您只需要重命名它:

private void navBarDisplayPanel(){
    yourStory = new JButton("Your Story");
    add(yourStory);
}

对此:

public navBarDisplayPanel(){
    yourStory = new JButton("Your Story");
    add(yourStory);
}

但正如我指出的那样,请尽量遵循 Java Naming Conventions(以及其他约定)以避免将来出错。