java - Java 子对象运行父对象的方法
问题描述
我决定将 BorderLayout 用于名为 Loginwards 的摇摆设计。我为 BorderLayout 的 5 面写了 5 个类,分别为 PageStart、LineStart、Center、LineEnd、PageEnd。
我没有装饰 Loginwards 并设计了 PageStart 用于最小化,调整大小,退出。(对于我自己的图像,规则......)按钮退出很简单,因为它像这样工作
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
System.exit(0);
}
});
但例如最小化我无法解决。我应该从另一个类对象更改我的 Loginwards 属性
总结
public class Loginwards extends Jframe
{ ...
JFrame frame = new JFrame("BorderLayoutDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(PageStart.Panel(), BorderLayout.PAGE_START);
...
}
public class PageStart{
public static JPanel Panel(){
JPanel panel = new JPanel();
FlowLayout pagestart = new FlowLayout(FlowLayout.RIGHT);
panel.setLayout(pagestart);
panel.add(MinimizeButton());
panel.add(ResizeButton());
panel.add(QuitButton());
}
public static JButton MinimizeButton(){
JButton button = new JButton();
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
// I Should be able to reach Loginwards here.
}
});
return button;
}
解决方案
MinimizeButton
是一个静态方法,因此将 Loginwards 实例作为参数传递,然后在您的侦听器中使用它:
public static JButton MinimizeButton(Loginwards loginwards){
JButton button = new JButton();
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
// Invoke whatever you need on Loginwards...
loginwards.doSomething();
}
});
return button;
}
顺便说一句,方法名称应以小写开头...请参阅Java 的命名约定
推荐阅读
- opentok - Opentok 连接质量为空
- python - Python 嵌套 elif,for
- python-3.x - 我怎样才能让 flake8 捕捉到这个错误?
- highcharts - highcharts 7 带有负刻度的问题
- mysql - 获取 MySQL 3.23 中的列数
- ruby-on-rails - .旋转!在 before_create 方法中抛出 NoMethodError,但 .rotate 没有
- c# - 异步更新属性 c# MVVM
- amazon-web-services - 从 AWS Opsworks Stacks Chef 11 迁移到 Chef 12 - 堆栈属性问题
- python - 使python键入下标泛型(实例)可检查
- html - How to center Text Under iFrame when text is wrapped around it