繁体   English   中英

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

[英]How to pass JPanel instance to another class?

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

我可以从另一个类中绘制,但我希望在我的BorderLayout.NORTHJPanel上有JButton 我只想绘制我的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 ,但现在我只能绘制到我的其他面板; 我希望它们包含文本字段和 JButtons。

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()

是您认为类navBarDisplayPanel的构造函数的真正navBarDisplayPanel

作为构造函数,如果您想从外部类使用它创建对象,则不应让它成为私有的,您应该删除void标记,因为这不是常规方法,并且(可选但非可选)您应该命名所有类(及其构造函数),首字母大写。

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

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

对此:

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

但正如我所指出的,尽量遵循Java 命名约定(以及其他约定)以避免将来出现错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM