簡體   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