Tabelle reagiert ungewollt auf Mausklick

L

Lupus93

Gast
Hallo wertes Forum

Ich plage mich schon seit einer Weile mit einem Problem rum und hoffe,
hier Hilfe zu finden.
Ich habe einen Testfall nachgeschrieben, in dem das Problem identisch wie im Hauptprogramm auftritt,
weshalb ich diesen hier poste. Der Unterschied besteht dann lediglich in den Daten, die im Hauptprogramm
aus einer Datenbank kommen.
Die Fehlerbeschreibung:
Man wählt A aus und bestätigt den Button, es wird die Tabelle a angezeigt.
Man wählt darauf hin B aus und bestätigt wieder den Button, Tabelle b wird angezeigt.
Klickt man jetzt in die Tabelle (Daten oder Head), wird auf einmal wieder Tabelle a angezeigt?!

Vielen Dank schonmal für eure Hilfe!

Code:

Java:
package fehler;

import javax.swing.*;
import javax.swing.table.DefaultTableModel;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Table_Combo {

	static void addComponent(Container cont, GridBagLayout gbl, Component c,
			int x, int y, int width, int height, double weightx,
			double weighty, Insets insets)

	{

		GridBagConstraints gbc = new GridBagConstraints();
		gbc.fill = GridBagConstraints.BOTH;
		gbc.gridx = x;
		gbc.gridy = y;
		gbc.gridwidth = width;
		gbc.gridheight = height;
		gbc.weightx = weightx;
		gbc.weighty = weighty;
		gbc.insets = insets; // oben,links,unten,rechts
		gbl.setConstraints(c, gbc);
		cont.add(c);

	}

	public static void main(String[] args) {
		JFrame testframe = new JFrame();
		testframe.setSize(300, 300);
		testframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		final Container c = testframe.getContentPane();
		final GridBagLayout gbl = new GridBagLayout();
		c.setLayout(gbl);

		final JComboBox test_box = new JComboBox();
		String[] inhalt = { "a", "b" };
		for (String s : inhalt)
			test_box.addItem(s);
		final JButton test_button = new JButton("Anzeigen");

		addComponent(c, gbl, test_box, 0, 0, 1, 1, 0, 0, new Insets(0, 0, 0, 0));
		addComponent(c, gbl, test_button, 1, 0, 1, 1, 0, 0, new Insets(0, 0, 0,
				0));

		ActionListener al = new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				if (e.getSource().equals(test_button)) {
					int index = test_box.getSelectedIndex();

					// hier beginnt das Problem:

					DefaultTableModel model = new DefaultTableModel();
					JTable table = new JTable(model);
					JScrollPane pane = new JScrollPane(table);
					addComponent(c, gbl, pane, 0, 1, 2, 1, 1.0, 1.0,
							new Insets(0, 0, 0, 0));

					if (index == 0) {
						String[] head = { "Kopf_a", "Kopf_a" };
						String[][] inhalt = { { "Inhalt_a", "Inhalt_a" },
								{ "Inhalt_a", "Inhalt_a" } };

						model.setDataVector(inhalt, head);
						model.fireTableDataChanged();

						// diesen Weg bin ich vorher gegangen, der jetzige
						// sollte besser sein:
						
						// table = new JTable(inhalt, head);
						// pane= new JScrollPane(table);
						c.validate();

					}

					if (index == 1) {
						String[] head2 = { "Kopf_b", "Kopf_b" };
						String[][] inhalt2 = { { "Inhalt_b", "Inhalt_b" },
								{ "Inhalt_b", "Inhalt_b" } };

						model.setDataVector(inhalt2, head2);
						model.fireTableDataChanged();
						c.validate();

					}

				}

			}
		};
		test_button.addActionListener(al);
		testframe.setVisible(true);
	}

}
 

TKausL

Top Contributor
Du addest hier Tabellen ohne zu berücksichtigen, dass die alte auch noch existiert. Somit hast du beim 2. Klick 2 Tabellen übereinander und es können solche Probleme auftreten. Entweder löschst du die alte jedesmal oder du belässt es bei einer und befüllst sie nur mit neuen Daten.
 

ssoul26

Bekanntes Mitglied
Du addest hier Tabellen ohne zu berücksichtigen, dass die alte auch noch existiert. Somit hast du beim 2. Klick 2 Tabellen übereinander und es können solche Probleme auftreten. Entweder löschst du die alte jedesmal oder du belässt es bei einer und befüllst sie nur mit neuen Daten.


Da hat TKausL recht! Leg vorher deine Tabelle mit Model an und verändere nur das Modell, anstelle jedesmal alles neu zu instanziieren.

Java:
package fehler;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class s {
   private static DefaultTableModel model;

   static void addComponent(Container cont, GridBagLayout gbl, Component c, int x, int y,
            int width, int height, double weightx, double weighty, Insets insets) {
      GridBagConstraints gbc = new GridBagConstraints();
      gbc.fill = GridBagConstraints.BOTH;
      gbc.gridx = x;
      gbc.gridy = y;
      gbc.gridwidth = width;
      gbc.gridheight = height;
      gbc.weightx = weightx;
      gbc.weighty = weighty;
      gbc.insets = insets; // oben,links,unten,rechts
      gbl.setConstraints(c, gbc);
      cont.add(c);
   }

   public static void main(String[] args) {
        JFrame testframe = new JFrame();
        testframe.setSize(300, 300);
        testframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        final Container c = testframe.getContentPane();
        final GridBagLayout gbl = new GridBagLayout();
        c.setLayout(gbl);
 
        final JComboBox test_box = new JComboBox();
        String[] inhalt = { "a", "b" };
        for (String s : inhalt)
            test_box.addItem(s);
        final JButton test_button = new JButton("Anzeigen");
 
        addComponent(c, gbl, test_box, 0, 0, 1, 1, 0, 0, new Insets(0, 0, 0, 0));
        addComponent(c, gbl, test_button, 1, 0, 1, 1, 0, 0, new Insets(0, 0, 0,
                0));
 
        
        model= new DefaultTableModel();
        JTable table = new JTable(model);
        JScrollPane pane = new JScrollPane(table);
        addComponent(c, gbl, pane, 0, 1, 2, 1, 1.0, 1.0,
                new Insets(0, 0, 0, 0));
        ActionListener al = new ActionListener() {
 
            @Override
            public void actionPerformed(ActionEvent e) {
                if (e.getSource().equals(test_button)) {
                    int index = test_box.getSelectedIndex();
 
                    // hier beginnt das Problem:

 
                    if (index == 0) {
                        String[] head = { "Kopf_a", "Kopf_a" };
                        String[][] inhalt = { { "Inhalt_a", "Inhalt_a" },
                                { "Inhalt_a", "Inhalt_a" } };
 
                        model.setDataVector(inhalt, head);
                     
                    }
 
                    if (index == 1) {
                        String[] head2 = { "Kopf_b", "Kopf_b" };
                        String[][] inhalt2 = { { "Inhalt_b", "Inhalt_b" },
                                { "Inhalt_b", "Inhalt_b" } };
 
                        model.setDataVector(inhalt2, head2);
                   
                    }
                    c.validate();
 
                }
 
            }
        };
        test_button.addActionListener(al);
        testframe.setVisible(true);
    }
}
 
L

Lupus93

Gast
Hallo

Danke für den Wink mit dem Zaunpfahl, manchmal sieht man den Wald vor lauter Bäumen nicht.
Wie ich auf die Idee gekommen bin, das in die Actionperformed zu schreiben...keine Ahnung.
Das hier muss über den ActionListener, und alles läuft:
Java:
final DefaultTableModel model = new DefaultTableModel();
		final JTable table = new JTable(model);
		final JScrollPane pane = new JScrollPane(table);
		addComponent(c, gbl, pane, 0, 1, 2, 1, 1.0, 1.0,
				new Insets(0, 0, 0, 0));

Danke!

Edit: Genau diese Lösung, nur eben mit final.
 
L

Lupus93

Gast
Hallo

Also, habe alles im Hauptprogramm geändert und klappt einwandfrei, vielen Dank nochmal!
Jetzt habe ich ein anderes Problem, das zwar unabhängig von diesem ist, aber da hier mein Code schon steht,
Müll ich das Forum nicht damit zu.
Außerdem geht es mir dabei ums Verständnis, habe da schon öfter Probleme gehabt, und wie man sieht,
fang ich mit Layouts etc. grade erst an.

Problem:
Bei Klick auf Button a entstehen 2 Tabellen nebeneinander.
B brauch wieder nur eine Tabelle, also soll die zweite verschwinden.
Der Code dafür:

Java:
boolean tabelle2_exist; // nur zur Information
if(tabelle2_exist){
c.remove(pane2);
c.validate();
}

Jetzt sieht die Sache danach recht kryptisch aus: Die richtige Tabelle liegt über der alten, diese ist noch sichtbar.
Minimiert und Maximiert man das Fenster wieder, ist alles gut.
Also gehts um das Neuladen des Fensters, wie mache ich das mit richtig sauberem Code (die Workarounds bis jetzt wollt ihr garnicht wissen)?

Danke!
 

ssoul26

Bekanntes Mitglied
Anstatt die gleiche Tabelle ständig zu removen und neu zu adden, versuch es doch mal mit .setVisible(boolean b) Methode. Eventuell musst du die Tableheader extra ansprechen -> .getTableHeader.setVisible(boolean b).
 
L

Lupus93

Gast
Hallo

Habe ich schon versucht, nur anscheinend nicht richtig.
Danke!

Java:
if(tabelle2_exist){
// table2.setVisible(false);   Nur die Tabelle, Head steht noch
// table2.getTableHeader().setVisible(false);   Head weg
pane2.setVisible(false);  Das ganze Pane weg, damit auch der Hintergrund weg ist
c.validate();
}

Klappt tadellos...

Danke und einen schönen Tag noch!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Kleine Sub-Tabelle in SpreadsheetView-Zelle anzeigen AWT, Swing, JavaFX & SWT 9
K Tabelle zu Datenbank hinzufügen / Apache Derby AWT, Swing, JavaFX & SWT 7
izoards JavaFX editierbare Tabelle AWT, Swing, JavaFX & SWT 4
HoT Sortieren von ein paar Zeilen in einer Tabelle, aber nicht die ganze Tabelle AWT, Swing, JavaFX & SWT 3
H Tabelle in JFrame einfügen AWT, Swing, JavaFX & SWT 1
T Zelle- und die Zeile-Farbenwechsel bei der Selektion in der Tabelle AWT, Swing, JavaFX & SWT 4
T Anbinden der Tabelle an die Daten AWT, Swing, JavaFX & SWT 5
ralfb1105 JavaFX TreeView dynamisch aus Datenbank Tabelle erstellen AWT, Swing, JavaFX & SWT 22
F JavaFX Tabelle mit Daten füllen AWT, Swing, JavaFX & SWT 9
kodela Swing Letzte Änderung in der Tabelle wird nicht gespeichert AWT, Swing, JavaFX & SWT 5
W JavaFX Tabelle zeilenweise mit Werten füllen und an Container anpassen AWT, Swing, JavaFX & SWT 23
F JavaFX Tabelle mit gespeicherten Eingabe Werten AWT, Swing, JavaFX & SWT 8
adiko01 JTable: Nur markierte Zeilen aus der Tabelle in CSV exportiern AWT, Swing, JavaFX & SWT 9
B Zeile einer Tabelle selektieren AWT, Swing, JavaFX & SWT 1
A Swing Tabelle wird bei Betätigung des Button nicht befüllt AWT, Swing, JavaFX & SWT 17
L Dynamischer Aufbau einer Tabelle über Objekte AWT, Swing, JavaFX & SWT 2
B Swing Tabelle(JTable) filtern swing GUI AWT, Swing, JavaFX & SWT 3
D Swing JScrollPane Tabelle ändern (2 Tabellen) AWT, Swing, JavaFX & SWT 7
MrSnake Tabelle nach 2 Strings Filtern AWT, Swing, JavaFX & SWT 3
D Filter in Tabelle Sql AWT, Swing, JavaFX & SWT 6
M JavaFX Tabelle flexibler Länge AWT, Swing, JavaFX & SWT 3
T Swing Tabelle mit Button - Anzeigefehler nach Zeile entfernen AWT, Swing, JavaFX & SWT 1
JavaMachtMichFertig JavaFX Gui - Löschbutton in Tabelle anzeigen, die mittels MySQL Abfrage gefüllt wird AWT, Swing, JavaFX & SWT 5
D Swing Breite einer HTML Tabelle in einer JTextPane AWT, Swing, JavaFX & SWT 6
J JavaFX Tabelle soll ganze Seite ausfüllen AWT, Swing, JavaFX & SWT 2
M ausgewählte Inhalt von ListItem inn ComboBox in der Tabelle speichern AWT, Swing, JavaFX & SWT 0
D Swing Eigene Tabelle AWT, Swing, JavaFX & SWT 18
M Filter in die JFace/SWT Tabelle einbauen AWT, Swing, JavaFX & SWT 5
T SWT Mysql Tabelle zeigt immer nur den ersten Wert immer wieder an AWT, Swing, JavaFX & SWT 3
J JavaFX eine Art Tabelle, jedoch mit mehreren Zeilen AWT, Swing, JavaFX & SWT 2
P Swing Klick in Tabelle nicht möglich AWT, Swing, JavaFX & SWT 0
Thallius Swing Tabelle nach Datumsspalte sortieren AWT, Swing, JavaFX & SWT 4
F JavaFX Daten aus Tabelle in ComboBox AWT, Swing, JavaFX & SWT 9
E Tabelle zeigt nicht neuste Datenbankeinträge an AWT, Swing, JavaFX & SWT 5
F SWT Problem mit Tabelle und Combobox in einem Wizard AWT, Swing, JavaFX & SWT 5
D Swing JTable- Meine Tabelle der Klasse JTable wird nur bedingt angezeigt AWT, Swing, JavaFX & SWT 4
O Tabelle "animiert" Scrollen AWT, Swing, JavaFX & SWT 1
R Int aus JSpinner auslesen und Tabelle erstellen AWT, Swing, JavaFX & SWT 3
G JavaFX ComboBoxTableCell für Zuordnung in Tabelle AWT, Swing, JavaFX & SWT 2
B Probleme bei Sortierung einer Tabelle mit DefaultTableModel AWT, Swing, JavaFX & SWT 6
C Verschiebbare "Buttons" in einer Tabelle AWT, Swing, JavaFX & SWT 3
S Swing Tabelle mit Model bei eingeschaltetem Filter synchronisieren AWT, Swing, JavaFX & SWT 6
P Listener Auswahl Tabelle AWT, Swing, JavaFX & SWT 6
B LayoutManager Tabelle repainten AWT, Swing, JavaFX & SWT 4
K Swing JTable Text im Hintergrund einer leeren Tabelle AWT, Swing, JavaFX & SWT 3
H JScrollPane - JEditorPane und HTML-Tabelle AWT, Swing, JavaFX & SWT 2
F Elementbezeichnung in der Tabelle AWT, Swing, JavaFX & SWT 7
F Tabelle sortieren AWT, Swing, JavaFX & SWT 3
F SWT Tabelle Zeile auslesen AWT, Swing, JavaFX & SWT 3
T Spaltennamen jeweils der angezeigten Tabelle anpassen AWT, Swing, JavaFX & SWT 19
S JTable Filter nach Wort oder Wortteil über ganze Tabelle AWT, Swing, JavaFX & SWT 5
L Fehler beim erstellen einer Tabelle mithilfe von 2d-Array AWT, Swing, JavaFX & SWT 3
T Swing JScrollPane- und Tabelle-Header Problem AWT, Swing, JavaFX & SWT 25
B Tabelle anpassen AWT, Swing, JavaFX & SWT 6
N jComboBox mit eigenem Renderer und eigenem Datentyp als Rückgabe in einer Tabelle AWT, Swing, JavaFX & SWT 2
N Button akivieren, wenn Tabelle verändert worden ist AWT, Swing, JavaFX & SWT 2
C SWT refresh einer Tabelle AWT, Swing, JavaFX & SWT 4
X Tabelle während Funktionsaufruf aktualisieren AWT, Swing, JavaFX & SWT 11
C SWT Tabelle mit Werten befüllen AWT, Swing, JavaFX & SWT 5
Y LayoutManager Keine vollständige Darstellung der Tabelle mit GridBagLayout AWT, Swing, JavaFX & SWT 3
S Tabelle sortieren, mit Ausnahme der letzten Zeile AWT, Swing, JavaFX & SWT 9
H SWT RAP Anwendung - Tabelle - Theming AWT, Swing, JavaFX & SWT 3
_dp Swing ScrollPane unterschlägt Großteil der Tabelle AWT, Swing, JavaFX & SWT 7
_dp Swing Tabelle: Ausklappbare Einträge AWT, Swing, JavaFX & SWT 2
C Swing Inhalt einer JTable aktualisieren und filten nach Feldern die nicht in der Tabelle sind AWT, Swing, JavaFX & SWT 3
S Tabelle im selben Formular anzeigen AWT, Swing, JavaFX & SWT 6
D Zwei String Attribute über eine Methode als Zeilen in einer Tabelle darstellen AWT, Swing, JavaFX & SWT 9
M Im Frame wird nur die Menüleiste erstellt und nicht die Tabelle? AWT, Swing, JavaFX & SWT 3
A SWT Tabelle (elegant) sortieren AWT, Swing, JavaFX & SWT 2
D Scrollbar für Tabelle AWT, Swing, JavaFX & SWT 2
A Button in Tabelle ansprechen AWT, Swing, JavaFX & SWT 6
O Tabelle laden - Prozessorlast 100% ?? AWT, Swing, JavaFX & SWT 11
F Tabelle und Bildindex (Thumbnails) AWT, Swing, JavaFX & SWT 4
A SWT Tabelle Sortieren AWT, Swing, JavaFX & SWT 3
H Swing Tabelle nach Klick auf Button mit Daten füllen? AWT, Swing, JavaFX & SWT 2
Airwolf89 Swing Exception beim Füllen einer Tabelle AWT, Swing, JavaFX & SWT 10
D Swing Tabelle sortieren AWT, Swing, JavaFX & SWT 4
B tabelle mit labeln AWT, Swing, JavaFX & SWT 2
M sortierbare Tabelle mit jface und databinding AWT, Swing, JavaFX & SWT 3
H ArrayList?! in Tabelle AWT, Swing, JavaFX & SWT 3
Milady Annzeigen alle Daten aus der Tabelle AWT, Swing, JavaFX & SWT 6
D SWT String aus Textfeld auslesen und in eine Tabelle speichern AWT, Swing, JavaFX & SWT 5
Ollek JTable - Tabelle füllen mit einer ArrayList AWT, Swing, JavaFX & SWT 22
E Daten aus sortierter Tabelle lesen AWT, Swing, JavaFX & SWT 2
T Swing Java Darstellung einer Tabelle AWT, Swing, JavaFX & SWT 3
FoolMoon Swing JCheckBox neben Text in einer Tabelle AWT, Swing, JavaFX & SWT 2
K Strings aus jTextArea in Liste oder Tabelle übertragen- wie? AWT, Swing, JavaFX & SWT 4
H Swing Saubere Erstellung einer Tabelle AWT, Swing, JavaFX & SWT 3
O Tabelle über Event sortieren AWT, Swing, JavaFX & SWT 4
T Invalid Range - Fehler bei TableRowSorter / Tabelle AWT, Swing, JavaFX & SWT 17
S Zeile an eine Tabelle anfügen AWT, Swing, JavaFX & SWT 5
S Datum in Tabelle darstellen? AWT, Swing, JavaFX & SWT 4
R JTable: Tabelle neu darstellen AWT, Swing, JavaFX & SWT 6
M JSplitPane Tabelle neu zeichnen AWT, Swing, JavaFX & SWT 3
G Tabelle eine JList anziegen AWT, Swing, JavaFX & SWT 4
G Tabelle Spalten unsichtbar machen AWT, Swing, JavaFX & SWT 5
P Für den Inhalt einer Zelle (aus Tabelle) STRG-C anwenden AWT, Swing, JavaFX & SWT 2
D Zahlen mit nullen in einer Tabelle anzeigen AWT, Swing, JavaFX & SWT 2
W Probleme beim Erstellen einer Tabelle AWT, Swing, JavaFX & SWT 2
? Tabelle formatieren - auch ohne CellRenderer? AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben