在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:
}
(...)
}
我该怎么做?
答案 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订阅JFrame1
(form.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);
(...)
}
});