2

我有一个应用程序,其中查找提供程序位于资源管理器窗口中,它是一个 jcomboBox。它的选定值作为对其他顶级组件的查找提供,并在编辑器中显示一个,在输出窗口区域显示一个。jcombobox的值在关闭应用时保存,在应用启动时初始化到jcombobox中。

当我清理和构建应用程序并启动应用程序时,jcombobox 中显示的初始值不会在查找中更新,并且侦听器窗口显示未初始化的值。一旦在 jcombobox 中选择了新值,它就会显示在其他窗口中。

如果我关闭应用程序而不更改 jcombobox 的值并启动应用程序,则不会更新查找。

如果我更改组合框中的选择,关闭应用程序并重新启动,查找就会更新。

我希望在应用程序启动的任何时候,其他窗口都会获得查找的值。在这方面的任何帮助将不胜感激。提前致谢。

提供查找的资源管理器窗口的代码如下:

public final class ProviderTopComponent extends TopComponent {

  public ProviderTopComponent() {
    initComponents();
    setName(Bundle.CTL_ProviderTopComponent());
    setToolTipText(Bundle.HINT_ProviderTopComponent());
    associateLookup(new AbstractLookup(content));
  }

  private void initComponents() {

    jComboBox1 = new javax.swing.JComboBox();

    jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
    jComboBox1.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jComboBox1ActionPerformed(evt);
        }
    });


  private void jComboBox1ActionPerformed(java.awt.event.ActionEvent evt) {                                           
    str = (String) jComboBox1.getSelectedItem();
    content.set(Collections.singleton(str), null);
}                                          

  private final InstanceContent content = new InstanceContent();
  String str;

  // Variables declaration - do not modify                     
  private javax.swing.JComboBox jComboBox1;


void writeProperties(java.util.Properties p) {
    // better to version settings since initial version as advocated at
    // http://wiki.apidesign.org/wiki/PropertyFiles
    p.setProperty("version", "1.0");
    p.setProperty("val", (String) jComboBox1.getSelectedItem());
}

void readProperties(java.util.Properties p) {
    String version = p.getProperty("version");
    // TODO read your settings according to their version
    String v = p.getProperty("val");
    if(v != null) {
        jComboBox1.setSelectedItem(v);
    }
}
}

查找侦听器窗口的代码如下:

public final class Listner_1TopComponent extends TopComponent implements LookupListener{

public Listner_1TopComponent() {
    initComponents();
    setName(Bundle.CTL_editorTopComponent());
    setToolTipText(Bundle.HINT_editorTopComponent());

}
...

private void initComponents() {
...
    jLabel1 = new javax.swing.JLabel();

...              

Collection<? extends String> str_collection;
private Lookup.Result<String> result = null;
String str;

// Variables declaration - do not modify                     
private javax.swing.JLabel jLabel1;
// End of variables declaration                   
@Override
public void componentOpened() {
    result = org.openide.util.Utilities.actionsGlobalContext().lookupResult(String.class);
    result.addLookupListener(this);
}

@Override
public void componentClosed() {
   result.removeLookupListener(this);
}


@Override
public void resultChanged(LookupEvent le) {
    str_collection = result.allInstances();
    if (str_collection.isEmpty()) {
    } else {
        str = str_collection.iterator().next();
    }
    jLabel1.setText(str);
    jLabel1.repaint();
}
}
4

0 回答 0