Filter mit JComboBox

Baste

Mitglied
Hi @ all.
Hab wieder mal ein kleines Problemchen.
Ich habe ein TabbedPane mit 2 Tabs ("Filter", "Liste"). Im ersten Tab soll man verschiedene Filterkriterien auswählen können (in JComboBox) und im 2. Tab soll dann die dazugehörige Tabelle angezeigt werden. Das CSV-File in des 2. Tab zu importieren klappt soweit (aber eben alle Datensätze). Nun habe ich keine so richtige Idee wie ich das mit dem Filter hinbekommen kann (will z.B. nur Daten zum Mitarbeiter XY).
Hier mal der Code von dem Filter - Panel:
Code:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JComboBox;
import javax.swing.JButton;
import javax.swing.UIManager;


public class Filter extends JPanel {

	private JLabel jLabel = null;
	private JLabel jLabel1 = null;
	private JLabel jLabel2 = null;
	private JLabel jLabel3 = null;
	private JComboBox jComboBox = null;
	private JComboBox jComboBox1 = null;
	private JComboBox jComboBox2 = null;
	private JButton jButton = null;

	/**
	 * This method initializes jComboBox	
	 * 	
	 * @return javax.swing.JComboBox	
	 */
	private JComboBox getJComboBox() {
		if (jComboBox == null) {
			jComboBox = new JComboBox();
			jComboBox.setBounds(new java.awt.Rectangle(97,72,130,17));
			jComboBox.setEditable(false);
		}
		return jComboBox;
	}

	/**
	 * This method initializes jComboBox1	
	 * 	
	 * @return javax.swing.JComboBox	
	 */
	private JComboBox getJComboBox1() {
		if (jComboBox1 == null) {
			jComboBox1 = new JComboBox();
			jComboBox1.setBounds(new java.awt.Rectangle(97,105,130,17));
		}
		return jComboBox1;
	}

	/**
	 * This method initializes jComboBox2	
	 * 	
	 * @return javax.swing.JComboBox	
	 */
	private JComboBox getJComboBox2() {
		if (jComboBox2 == null) {
			jComboBox2 = new JComboBox();
			jComboBox2.setBounds(new java.awt.Rectangle(97,138,130,17));
		}
		return jComboBox2;
	}

	/**
	 * This method initializes jButton	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getJButton() {
		if (jButton == null) {
			jButton = new JButton();
			jButton.setBounds(new java.awt.Rectangle(115,174,74,17));
			jButton.setText("OK");
		}
		return jButton;
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		new Filter ();

	}

	/**
	 * This is the default constructor
	 */
	public Filter() {
		super();
		initialize();
	}

	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	private void initialize() {
		try {
	          UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
	        }
	        catch (Exception ex) {
	          System.out.println("**ERROR** Konnte den Stil der Oberfläche nicht festlegen...");
	        }
		jLabel3 = new JLabel();
		jLabel3.setBounds(new java.awt.Rectangle(14,138,58,16));
		jLabel3.setText("Aufgabe:");
		jLabel2 = new JLabel();
		jLabel2.setBounds(new java.awt.Rectangle(14,105,46,16));
		jLabel2.setText("Projekt:");
		jLabel1 = new JLabel();
		jLabel1.setBounds(new java.awt.Rectangle(14,72,68,16));
		jLabel1.setText("Mitarbeiter:");
		jLabel = new JLabel();
		jLabel.setText("Filterkriterium auswählen");
		jLabel.setFont(new java.awt.Font("Dialog", java.awt.Font.BOLD, 14));
		jLabel.setBounds(new java.awt.Rectangle(14,29,190,16));
		this.setLayout(null);
		this.setSize(300, 200);
		this.add(jLabel, null);
		this.add(jLabel1, null);
		this.add(jLabel2, null);
		this.add(jLabel3, null);
		this.add(getJComboBox(), null);
		this.add(getJComboBox1(), null);
		this.add(getJComboBox2(), null);
		this.add(getJButton(), null);
	}

}

Danke schon mal ;)
 
Hier mal noch mein Code für das Importieren der Files:

Code:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Arrays;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.filechooser.FileFilter;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;

public class ImportAlle extends JPanel {
	
	private JTable table;
	private JButton importieren;
	private JButton exportieren;
	private JFileChooser oeffnen = new JFileChooser(){
	  {
		setFileFilter(new FileFilter() {

			public boolean accept(File f) {
				return f.getName().toLowerCase().endsWith("csv");
			}

			public String getDescription() {
				return "CSV Datei (Comma Seperated Values)";
			}

		});
	  }
	};
	
	public ImportAlle (){
		setSize(600,600);
		importieren = new JButton ("CSV-File importieren");
		importieren.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (!(oeffnen.showOpenDialog(ImportAlle.this) == JFileChooser.APPROVE_OPTION))
					return;
				final File file = oeffnen.getSelectedFile();
				if (file == null)
					return;

				SwingUtilities.invokeLater(new Runnable() {
					public void run() {
						TableModel model = parseCSVAndCreateTableModel(file);
						table.setModel(model);
					}
				});

			}
		});
		exportieren = new JButton ("CSV-Files exportieren");
		table = new JTable();
		add(new JScrollPane(table), BorderLayout.CENTER);
		add(importieren, BorderLayout.SOUTH);
		add(exportieren, BorderLayout.SOUTH);
		exportieren.setEnabled(false);
	    try {
	          UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
	        }
	        catch (Exception ex) {
	          System.out.println("**ERROR** Konnte den Stil der Oberfläche nicht festlegen...");
	        }
		setVisible(true);
	}
	private TableModel parseCSVAndCreateTableModel(File file) {

		Vector v = new Vector();
		BufferedReader br = null;
		try {
			br = new BufferedReader(new FileReader(file));

			// Überschriften stehen in erster Zeile
			String[] rowItems = br.readLine().split(";");
			Vector header = new Vector(Arrays.asList(rowItems));
			while (br.ready()) {
				rowItems = br.readLine().split(";");
				v.add(new Vector(Arrays.asList(rowItems)));
			}
			DefaultTableModel model = new DefaultTableModel(v, header);
			table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
			return model;

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				br.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

		return null;
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		new ImportAlle();
	}

}
 
Moin,
ich würde so vorgehen - ohne einen Blick in Deinen Quellcode geworfen zu haben:
Ein DatenModel halten, in dem alle Datensätze vorhanden sind. Bei Auswahl eines Filters ist dann aus dem ganzen Datenmodell ein eingeschränktes Datenmodell zu konstruieren/aktualisieren, welches
a) die Einträge enthält, die den Filterkriterien entsprechen
b) in der Tabelle angezeigt wird - üblicherweise in der getValueAt
 
Zurück