-1

在 netbeans 中,我有一个 JFrame 和一个 JavaClass。在我的 JFrame 中,我有一个组合框来选择将在 Java 类中的操作中使用的文件。

Java类:

public class WekaTest {
    public static BufferedReader readDataFile(String filename) {
        BufferedReader inputReader = null;

        try {
            inputReader = new BufferedReader(new FileReader(filename));
        } catch (FileNotFoundException ex) {
            System.err.println("Ficheiro " + filename + " não encontrado");
        }

        return inputReader;
    }

(...)

    public static void main(String[] args) throws Exception {

        JFrame1 form = new JFrame1();
        form.setVisible(true);

        BufferedReader datafile = readDataFile("weather.nominal.arff");

        Instances data = new Instances(datafile);
        data.setClassIndex(data.numAttributes() - 1);

        (...)

    }

}

我需要的是,从 JFrame 的组合框中,选择一个不同的数据文件来读取。因此,当我更改组合框中的选定项目时,我想将我的数据文件设置为该值。

这是 JFrame 代码:

public class JFrame1 extends javax.swing.JFrame {

    public JFrame1() {
        initComponents();
    }

   (...)                       

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
        jTextField1.setText(arffComboBox.getSelectedItem().toString());;

    }                                        

    private void arffComboBoxActionPerformed(java.awt.event.ActionEvent evt) {                                             
        // TODO add your handling code here:
    }                                            

(...)               
}

我怎样才能做到这一点?

4

1 回答 1

1

使以下成为private(或public)成员:

private BufferedReader datafile = null;

然后在您分配给组合框的动作侦听器中进行读取:

private void arffComboBoxActionPerformed(java.awt.event.ActionEvent evt) {                                             
    String pth = arffComboBox.getSelectedItem();
    datafile = readDataFile(pth);
}

然后,您可以根据datafile需要在侦听器或其他地方使用。

像这样的东西应该做你所追求的。

编辑

鉴于新信息,您可能最好使用订阅( ) 对象并侦听您在方法中触发的PropertyChangeListener 。JFrame1form.addPropertyChangeListenerPropertyChangeEventsarffComboBoxActionPerformed

arffComboBoxActionPerformed

private void arffComboBoxActionPerformed(java.awt.event.ActionEvent evt) {                                             
    String pth = arffComboBox.getSelectedItem();
    firePropertyChange('combo_changed', null, pth);
}

然后在main

JFrame1 form = new JFrame1();
form.setVisible(true);
form.addPropertyChangeListener(new PropertyChangeListener() {

    @Override
    public void propertyChange(PropertyChangeEvent pce) {
        // Handle the change here

        String pth = (String) pce.getNewValue();
        BufferedReader datafile = readDataFile(pth);

        Instances data = new Instances(datafile);
        data.setClassIndex(data.numAttributes() - 1);

        (...)
    }

});
于 2013-07-10T16:51:11.213 回答