如何将 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(以及其他约定)以避免将来出错。
我正在努力显示我在另一个 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(以及其他约定)以避免将来出错。