- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有 jFrame
类 MainForm
,其中包含 main()
、placePanel(panel)
和下拉菜单。从下拉菜单中的项目中,我调用 placePanel(panel)
方法将特定面板放置在 jFrame
容器中。这工作得很好。
但是,当我单击 jPanel
类中的按钮时,我不知道如何切换面板。当我尝试从加载到 jFrame
的任何 jPanel
调用 jFrame
的 MainForm.placePanel(panel)
时的容器,我收到错误:无法引用非静态内容
等。我也尝试了Mainform.getContainer().add(panel)
,但它没有也工作。
我不知道如何从另一个类访问 MainForm
的容器,或者如何使用另一个面板中的方法切换面板。
谢谢
最佳答案
如果你想从另一个对象中调用一个对象的方法,你将需要一个对第一个对象的引用,这样你就可以在 Activity 对象本身上调用该方法,而不是在类上调用该方法(因为你'目前正在尝试做)。解决此问题的一种方法是将保存 JPanel 的类的引用传递给具有按钮的操作监听器代码的类(可能在后者的构造函数中)。换句话说,您需要将对当前 Activity 且可视化的 MainForm 对象的引用传递到具有按钮的 ActionListener 的类中。
顺便问一下,您是否正在将 JPanel 替换为 CardLayout?如果没有,我建议您研究一下,因为这通常是最简单的方法。
编辑:
例如,假设您有一个名为 MainForm 的类,它有一个名为 swapJPanels 的公共(public)方法,允许它交换 View ,而另一个类 MyPanel 拥有您的 JButton,想要从 MainForm 类调用方法,那么您可以给出MyPanel 是一个构造函数,它采用 MainForm 参数并允许您将当前 MainForm 对象(类内部的 this)的引用传递到 MyPanel 对象中:
主窗体:
class MainForm extends JFrame {
public MainForm() {
MyPanel myPanel = new MyPanel(this); // pass "this" or the current MainForm reference to MyPanel
}
public void swapJPanels(int panelNumber) {
}
}
我的面板:
class MyPanel extends JPanel {
private MainForm myMainForm; // holds the reference to the current MainForm object
public MyPanel(MainForm myMainForm) {
this.myMainForm = myMainForm; // set the reference
JButton swapPanelBtn = new JButton("Swap Panel");
swapPanelBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
swapPanelBtnActionPerformed();
}
});
}
private void swapPanelBtnActionPerformed() {
myMainForm.swapJPanels(0); // calling a method on the reference to the current MainForm object
}
}
关于java - 从外部类切换 Java 中的 jPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5693878/
我是一名优秀的程序员,十分优秀!