-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 に答える