Swing Tabelle nach Klick auf Button mit Daten füllen?

Häcki.

Mitglied
Hallo Leute, folgendes Problem:
Ich habe mir via SWING eine kleine Oberfläche gebastelt und möchte in diese nun eine kleine Tabelle implementieren.
Soweit so gut - ein kleines Experiment habe ich damit auch schon vollzogen und die Tabelle wird problemlos dargestellt.

Wie aber bekomme ich jetzt den Inhalt "dynamisch" nach einem Klick auf die Suchen-Taste in die Tabelle integriert?
Vorliegen würden die Daten in einem passenden 2D-Array, mit den dazugehörigen Größen (Testweise wie in diesem Fall erstmal nur 2 Spalten).

Java:
			public void action() 
	        {
	    		// Debugbenachrichtigung, dass Agent gebootet wurde
	    		System.out.println("Boot of " + myAgent.getLocalName() + " successful!");
	    		
	    		// Fenster erzeugen
	    		JFrame f = new JFrame("Eingabemaske"); 
	    		f.setLayout(null);
	    	    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
	    	    
	    	    // Textlabel hinzufügen
	    	    JLabel label = new JLabel("Suchwort eingeben");
	    	    label.setSize(200,15);
	    	    label.setLocation(0,0);
	            f.getContentPane().add(label);
	            
	            // Eingabefeld hinzufügen
	            final JTextField textfield = new JTextField();
	            textfield.setSize(200,25);
	            textfield.setLocation(0,15);
	            f.getContentPane().add(textfield);
	            
	            // Tabelle hinzufügen
	            String[][] rowData = { 
	            	      { "Japan", "245" }, { "USA", "240" }, { "Italien", "220" }, 
	            	      { "Spanien", "217" }, {"Türkei", "215"} ,{ "England", "214" }, 
	            	      { "Frankreich", "190" }, {"Griechenland", "185" }, 
	            	      { "Deutschland", "180" }, {"Portugal", "170" } 
	            	    };
	            	 
	            String[] columnNames =  { 
	            	      "Land", "Durchschnittliche Fernsehdauer pro Tag in Minuten" 
	            	    }; 
	            	 
	            JTable table = new JTable(rowData, columnNames);
	            table.setSize(400, 400);
	            table.setLocation(0,100);
	            f.getContentPane().add(table); 
	            
	            // Suchen-Button hinzufügen
	            JButton button = new JButton("suchen");
	            button.setSize(100,25);
	            button.setLocation(100,60);
	            // Actionlistener für den Button
	            button.addActionListener(
	            	    new ActionListener()
	            	    {
	            	        public void actionPerformed(ActionEvent e)
	            	        {
	            	        	InputAgent.nachricht = textfield.getText();
	            	        }
	            	    }
	            	);
	            f.getContentPane().add(button);

	            // Fenstergröße festlegen und Fenster sichtbar machen
	    	    f.setSize(800, 600); 
	    	    f.setVisible(true); 
	    	}
 
Naja, du benutzt hier das AbstractTableModel, das ist etwas unvorteilhaft meiner Meinung nach wenn man anschließend Daten ändern will(man hätte nur die Möglichkeit mit setValueAt einen einzelnen Wert zu ändern).
Besser wäre da wohl ein eigenes Model wo du gezielt auch alle Daten irgendwie wie du es willst ändern/austauschen kannst.

Ansonsten könnte man hier wohl auch einfach der Table ein neues Model setzen (z.B. DefaultTableModel), aber das ist vllt unschön?!
Java:
				final Object[][] rowData = //dein neues 2D-Array
				DefaultTableModel model = new DefaultTableModel(rowData, columnNames);//columnNames müsste hierfür in deinem Beispiel final gemacht werden
				table.setModel(model);

EDIT: bzw. wenn die Daten eh schon vorhanden sind, und du nur wirklich suchen/filtern willst, gibt es da auch schon fertige Sachen wie RowFilter/TableRowSorter und wie se nicht alle heißen und wären dann wohl eine bessere Alternative?!
 
Zuletzt bearbeitet:
Wie schon erwähnt: Nach jedem Klick auf den Button ändern sich die Daten, die ich in die Tabelle einfügen möchte.
D.h. im Grunde: Tabelle leeren, neue Daten einfügen.
 

Zurück
Oben