在netbeans中将值从jframe传递到java类

时间:2013-07-10 16:41:47

标签: java netbeans jframe

在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:
    }                                            

(...)               
}

我该怎么做?

1 个答案:

答案 0 :(得分: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.addPropertyChangeListener)对象并听取PropertyChangeEvents您的信息从arffComboBoxActionPerformed方法中解雇。

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);

        (...)
    }

});