当我在ExplorerWindow中按下按钮时,我一直试图调用一个在EditorWindow中显示帧的方法。
共有3个模块:
包含此接口的AppEditorAPI
package org.app.AppEditorAPI;
public interface Displayer {
public void Display();
}
AppEditor包含EditorTopComponent
@ServiceProvider(service=Displayer.class)
public final class EditorTopComponent extends TopComponent implements Displayer{
private JDesktopPane jdpDesktop=null;
private int openFrameCount = 0;
...
protected void createFrame() {
MyInternalFrame frame = new MyInternalFrame();
frame.setVisible(true);
jdpDesktop.add(frame);
try {
frame.setSelected(true);
} catch (java.beans.PropertyVetoException e) {
}
}
class MyInternalFrame extends JInternalFrame {
int xPosition = 30, yPosition = 30;
public MyInternalFrame() {
super("IFrame #" + (++openFrameCount), true, // resizable
true, // closable
true, // maximizable
true);// iconifiable
setSize(300, 300);
setLocation(xPosition / openFrameCount, yPosition / openFrameCount);
// Add some content:
add(new JLabel("hello IFrame #" + (openFrameCount)));
}
}
public void Display(){
jdpDesktop = new JDesktopPane();
createFrame(); // Create first window
createFrame(); // Create second window
createFrame(); // Create third window
//Add the JDesktop to the TopComponent
add(jdpDesktop);
}
}
和AppExplorer,其中包含ExplorerTopComponent
public final class ExplorerTopComponent extends TopComponent {
...
private void initComponents() {
B_Display = new javax.swing.JButton();
..
}
private void B_DisplayActionPerformed(java.awt.event.ActionEvent evt) {
Displayer D = Lookup.getDefault().lookup(Displayer.class);
D.Display();
}
...
}
下面是项目zip文件的链接。
http://dl.free.fr/k2Z6DRLrW
http://www.fileswap.com/dl/lCeFPcUfbg/
做了一些测试。我发现我无法更改(添加,删除或编辑)EditorTopComponent的变量或属性。
就像在这种情况下,这两行;
public void Display(){
jdpDesktop = new JDesktopPane();
...
add(jdpDesktop);
}
不执行它们应该执行的原因,执行后,EditorTopComponent.jdpDesktop仍然等于null并且没有添加到EditorTopComponent中。
知道我想做什么,有人可以指导我走上正确的轨道吗?
答案 0 :(得分:0)
最后,'让它发挥作用......看看当你不读书时会发生什么:P
如果有人面临同样的问题,我会发布解决方案。
正如我在编辑问题时所提到的,知道通过查找不允许修改,您可以使用可在查找中修改的InstanceContent变量,或者使用WindowManager来设置EditorTopComponent并调用Display(方法。
祝你好运