Mel*_*Mel 4 java methods class
我认为最好在示例程序代码中显示以下情况.我有一个扩展的Java类JPanel.在这个类中有两个对象,还有两个JPanels.其中一个JPanel对象是一个JTable对象.我添加了一个侦听器来JTable检测双击.当它检测到双击时,我想在顶级类中触发一个方法.如何在Java中引用此方法?
public class TopPanel extends JPanel {
JPanel OnePanel;
JPanel TwoPanel;
public void MethodToFire;
}
public class OnePanel extends JPanel {
JTable TheTable;
}
public class TheTable extends JTable {
public TheTable {
this.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e){
if (e.getClickCount() == 2){ SYNTAX CALLING THE METHOD IN TopPanel }
}
} );
}
}
Run Code Online (Sandbox Code Playgroud)
解决此问题的一种方法是使用组合而不是继承.您可以将JPanel传递给JTable的子类.
public class TopPanel extends JPanel
{
private TheTable table;
public TopPanel()
{
table = new TheTable(this);
}
public void methodToFire() { }
}
public class TheTable extends JTable
{
private TopPanel panel;
public TheTable(TopPanel panel)
{
this.panel = panel;
this.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
doThing();
}
} );
}
private void doThing()
{
this.panel.methodToFire();
}
}
Run Code Online (Sandbox Code Playgroud)
要访问 Outer 类上的方法,您需要使用 Outer.this.method() 的语法。
因此,在这种情况下,要从侦听器访问“TheTable”类上的方法,您应该使用TheTable.this.callMethod().
我认为TopPanel已将TheTable. 在这种情况下,您可以执行以下操作:
mouseClicked(...) {
TopTable t = (TopTable)TheTable.this.getParent();
t.MethodToFire();
}
Run Code Online (Sandbox Code Playgroud)
这是对问题的直接回答,不一定是“最佳”方法。类型安全的组合方法将是更好的长期解决方案。
| 归档时间: |
|
| 查看次数: |
34902 次 |
| 最近记录: |