ausgewählte Zeile mit Hilfe der Tastatur löschen!

infboy

Mitglied
Hallo,

ich habe mal wieder ein Problem!

Habe eine JTable die ich wie gewünscht mit einem Button komplet löschen kann und es funktioniert auch!

Ich möchte aber noch zusätzlic, wenn der Benutzer in einer Zeile "Name" clickt, es auch mit der Entfernung-Taste des keyboards, die komplete Zeile löschen kann. Sodass nur die gewünschte Zeile gelöscht wird und alle anderen übrig bleiben.

Bekomme es aber nicht hin! Kann mir vllt. jemand helfen?

Meine Tabelle sieht wie folgt aus:
Java:
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.JScrollPane;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;


public class Namensfenster extends JFrame {

	private JPanel contentPane;
	private JTable table;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					Namensfenster frame = new Namensfenster();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public Namensfenster() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 490, 300);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		JScrollPane scrollPane = new JScrollPane();
		scrollPane.setBounds(10, 11, 243, 240);
		contentPane.add(scrollPane);
		
		table = new JTable();
		scrollPane.setViewportView(table);
		table.setModel(new DefaultTableModel(
			new Object[][] {
				{null, null},
				{null, null},
				{null, null},
				{null, null},
				{null, null},
				{null, null},
				{null, null},
				{null, null},
				{null, null},
				{null, null},
				{null, null},
				{null, null},
				{null, null},
				{null, null},
				{null, null},
				{null, null},
				{null, null},
				{null, null},
				{null, null},
				{null, null},
			},
			new String[] {
				"Name", "Gewicht"
			}
		));
		
		JButton btnNewButton = new JButton("Tabelleninhalte l\u00F6schen");
		btnNewButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				/*
				 * Dies zeigt das Dialogfenster an. Wenn der Benutzer sich
				 * sicher ist, werden die Einträge in der Tabelle gelöscht Wenn
				 * der Benutzer sich nicht sicher ist, schließt sich das
				 * Dialogfenster und der Benutzer sieht das unveränderte
				 * Namensfenster.
				 */
				JFrame frameDelete = new JFrame();
				Object[] options = { "Ja",
						"Nein" };
				int condition = JOptionPane.showOptionDialog(frameDelete,
						"Alle Einträge löschen?", "",
						JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE,
						null, // Benutzt keinen
						// definierten Icon
						options, // Der Titel von dem Button
						options[0]); // Voreinstellung für den Button-Titel

				/*
				 * Dies löscht die Eintraege in der Tabelle
				 */
				if (condition == JOptionPane.YES_OPTION) {
					if (table.isEditing()) {
						table.getCellEditor().stopCellEditing();
					}
					int row = table.getRowCount();
					int column = table.getColumnCount();
					for (int i = 0; i < row; i++) {
						for (int j = 0; j < column; j++) {
							if(table.getValueAt(i,0) != null) {
							((DefaultTableModel) table.getModel()).setValueAt(
									null, i, j);
							}
						}

					}
				}
			}
		});
		btnNewButton.setBounds(263, 228, 201, 23);
		contentPane.add(btnNewButton);
	}
}
 

infboy

Mitglied
Ich habe mir jetzt einen Einsatzt gebastelt!
Es geht aber leider noch nicht.

Ich habe die folgende Methode geschrieben:
Java:
                private void deleteRow(JTable table) {
		int selected = table.getSelectedRow();
		if (table.isEditing()) {
			table.getCellEditor().stopCellEditing();
		}
		// Verhindert das die Letzte Zeile gelöscht werden kann
		if (table.getRowCount() - 1 != selected && selected != -1) {
			((DefaultTableModel) table.getModel()).removeRow(selected);
		}
		selectRow(table, selected);

	}

und mit Hilfe dieser Methode habe ich folgenden Codestück geschrieben:
Java:
                // Soll nur die Ausgewählte Zeile beim Druck von "Entf" auf der Tastatur löschen! (funktioniert aber noch nicht!)
		String DELETE = "pressed";
		int condition = JComponent.WHEN_IN_FOCUSED_WINDOW;
		InputMap inputMap = contentPane.getInputMap(condition);
		ActionMap actionMap = contentPane.getActionMap();

		// DELETE is a String constant that for me was defined as "Delete"
		inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0), DELETE);
		actionMap.put(DELETE, new AbstractAction() {
			public void actionPerformed(ActionEvent e) {
				deleteRow(table);
			}
		});

die geamte Code sieht jetzt folgendermassen aus:
Java:
import java.awt.EventQueue;

import javax.swing.AbstractAction;
import javax.swing.ActionMap;
import javax.swing.InputMap;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.KeyStroke;
import javax.swing.ListSelectionModel;
import javax.swing.border.EmptyBorder;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.JScrollPane;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;


public class Namensfenster extends JFrame {

	private JPanel contentPane;
	private JTable table;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					Namensfenster frame = new Namensfenster();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public Namensfenster() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 490, 300);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		JScrollPane scrollPane = new JScrollPane();
		scrollPane.setBounds(10, 11, 243, 240);
		contentPane.add(scrollPane);
		
		table = new JTable();
		scrollPane.setViewportView(table);
		table.setModel(new DefaultTableModel(
			new Object[][] {
				{null, null},
				{null, null},
				{null, null},
				{null, null},
				{null, null},
				{null, null},
				{null, null},
				{null, null},
				{null, null},
				{null, null},
				{null, null},
				{null, null},
				{null, null},
				{null, null},
				{null, null},
				{null, null},
				{null, null},
				{null, null},
				{null, null},
				{null, null},
			},
			new String[] {
				"Name", "Gewicht"
			}
		));
		
		JButton btnNewButton = new JButton("Tabelleninhalte l\u00F6schen");
		btnNewButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				/*
				 * Dies zeigt das Dialogfenster an. Wenn der Benutzer sich
				 * sicher ist, werden die Einträge in der Tabelle gelöscht Wenn
				 * der Benutzer sich nicht sicher ist, schließt sich das
				 * Dialogfenster und der Benutzer sieht das unveränderte
				 * Namensfenster.
				 */
				JFrame frameDelete = new JFrame();
				Object[] options = { "Ja",
						"Nein" };
				int condition = JOptionPane.showOptionDialog(frameDelete,
						"Alle Einträge löschen?", "",
						JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE,
						null, // Benutzt keinen
						// definierten Icon
						options, // Der Titel von dem Button
						options[0]); // Voreinstellung für den Button-Titel

				/*
				 * Dies löscht die Eintraege in der Tabelle
				 */
				if (condition == JOptionPane.YES_OPTION) {
					if (table.isEditing()) {
						table.getCellEditor().stopCellEditing();
					}
					int row = table.getRowCount();
					int column = table.getColumnCount();
					for (int i = 0; i < row; i++) {
						for (int j = 0; j < column; j++) {
							if(table.getValueAt(i,0) != null) {
							((DefaultTableModel) table.getModel()).setValueAt(
									null, i, j);
							}
						}

					}
				}
				selectRow(table, 0);
			}
		});
		
		// Dies Leert nur die Ausgewählte Zeile beim Druck von "Entf"
		// funktioniert aber noch nicht
		String DELETE = "pressed";
		int condition = JComponent.WHEN_IN_FOCUSED_WINDOW;
		InputMap inputMap = contentPane.getInputMap(condition);
		ActionMap actionMap = contentPane.getActionMap();

		// DELETE is a String constant that for me was defined as "Delete"
		inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0), DELETE);
		actionMap.put(DELETE, new AbstractAction() {
			public void actionPerformed(ActionEvent e) {
				deleteRow(table);
			}
		});
		
		btnNewButton.setBounds(263, 228, 201, 23);
		contentPane.add(btnNewButton);
	}
	
	private void selectRow(JTable tab, int select) {
		ListSelectionModel selectionModel = tab.getSelectionModel();
		selectionModel.setSelectionInterval(select, select);
	}
	
	private void deleteRow(JTable table) {
		int selected = table.getSelectedRow();
		if (table.isEditing()) {
			table.getCellEditor().stopCellEditing();
		}
		// Verhindert das die Letzte Zeile gelöscht werden kann
		if (table.getRowCount() - 1 != selected && selected != -1) {
			((DefaultTableModel) table.getModel()).removeRow(selected);
		}
		selectRow(table, selected);

	}
}

wie gesagt, es geht immer noch nicht!:noe::(
Bitte um einen Tipp!
 
C

Camino

Gast
Ich hatte schon mal so etwas ähnliches umgesetzt, nur mit der Enter-Taste und dass dann eine Person aus der Tabelle ausgewählt wird:

Java:
		// Enter-Taste bei Tabelle zeigt bestimmte Person im Formular an
		datenTabelle.addKeyListener(new KeyAdapter() {
			public void keyPressed(KeyEvent ke) {
				if (ke.getKeyCode() == KeyEvent.VK_ENTER){
					selectPerson();
				}
			}
		});

Musst du halt nur noch den KeyEvent auf die Entf-Taste umschreiben und die entsprechende Methode anpassen.

Überlegen würde ich mir auch noch, ob es gewünscht/sinnvoll ist, dass man ohne Rückfrage, ob auch wirklich gelöscht werden soll, Daten aus der Tabelle löschen sollen kann. Nicht dass man aus Versehen zu schnell oder zu viel löscht.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G TableCellRenderer soll ganze ausgewählte Zeile markieren AWT, Swing, JavaFX & SWT 2
J CheckComboBox : Ausgewählte Items NICHT im Header anzeigen AWT, Swing, JavaFX & SWT 4
S JavaFx - ausgewählte Rows in Arraylist (Tableview) AWT, Swing, JavaFX & SWT 4
M ausgewählte Inhalt von ListItem inn ComboBox in der Tabelle speichern AWT, Swing, JavaFX & SWT 0
R JavaFX TableView - nicht ausgewählte Reihe ansprechen AWT, Swing, JavaFX & SWT 6
C ausgewählte JtoggleButton als Variablenwert ausgeben AWT, Swing, JavaFX & SWT 14
D ausgewählte Textstellen scheinen durch Dialog durch AWT, Swing, JavaFX & SWT 7
L Header von ausgewählte Spalten ausgeben AWT, Swing, JavaFX & SWT 6
L Inhalt von ausgewählte Spalten aus JTable abfragen AWT, Swing, JavaFX & SWT 4
M JavaFX TableView nur erste Zeile editable machen und gelb markieren AWT, Swing, JavaFX & SWT 0
F Zeile in mehreren Jtables bei Selektion markieren AWT, Swing, JavaFX & SWT 11
missy72 JavaFX TableRow / RowFactory Zeile einfärben AWT, Swing, JavaFX & SWT 9
T Zelle- und die Zeile-Farbenwechsel bei der Selektion in der Tabelle AWT, Swing, JavaFX & SWT 4
M TableView Zeile hinzufügen AWT, Swing, JavaFX & SWT 5
I JLabel neue Zeile AWT, Swing, JavaFX & SWT 4
B JavaFX TableView eine Zeile markieren AWT, Swing, JavaFX & SWT 5
C SWT Breadcrumb Zeile mit entsprechenden Hyperlinks erstellen AWT, Swing, JavaFX & SWT 0
VfL_Freak Swing Einzelne Zeile in jTable selektieren klappt nicht AWT, Swing, JavaFX & SWT 7
Bluedaishi JTextArea gefundene Zeile nach Oben Scrollen AWT, Swing, JavaFX & SWT 13
B Zeile einer Tabelle selektieren AWT, Swing, JavaFX & SWT 1
T Swing Tabelle mit Button - Anzeigefehler nach Zeile entfernen AWT, Swing, JavaFX & SWT 1
T Swing JTable Zeile mit ausgelesenen Werten mit Hilfe von einem Button hinzufügen AWT, Swing, JavaFX & SWT 1
D JLabel bei Aufruf neue Zeile AWT, Swing, JavaFX & SWT 5
C Button Text in JList neue Zeile AWT, Swing, JavaFX & SWT 6
J Swing JTable Zeile nicht auswählbar machen AWT, Swing, JavaFX & SWT 0
F Swing String[] in JTextArea ausgeben. Jeder Eintrag in neue Zeile, aber ohne "\n"- Geht das? AWT, Swing, JavaFX & SWT 3
N AWT Markierte Zeile jList aus mySQL DB löschen AWT, Swing, JavaFX & SWT 2
J JTable Zeile anklicken und neues Frame öffnen AWT, Swing, JavaFX & SWT 4
S JTable nach aktualisierung - neue Zeile nicht "klickbar" AWT, Swing, JavaFX & SWT 0
D Swing Letzte Zeile einer JTable nicht über RowSorter sotieren AWT, Swing, JavaFX & SWT 2
M Text Area 1. Zeile oben AWT, Swing, JavaFX & SWT 4
B jTable ganze Zeile anhand eines Kriterium färben AWT, Swing, JavaFX & SWT 6
T JtextPane Zeile aktualisieren AWT, Swing, JavaFX & SWT 3
M JTextArea Zeile hinzufügen AWT, Swing, JavaFX & SWT 4
M Swing JScrollPane (Parent JTextArea) aktualisieren + neue Zeile AWT, Swing, JavaFX & SWT 5
P Swing Alle Zeilen einer Spalte (jTable) zusammen zählen und in eine eigene Zeile das Ergebnis schreiben. AWT, Swing, JavaFX & SWT 7
Ollek Swing JTable - Zeile löschen mit AbstractTableModel AWT, Swing, JavaFX & SWT 20
S Swing Kopieren einer vollständigen Zeile einer JTable AWT, Swing, JavaFX & SWT 3
F GroupableTableHeader zeigt nur eine Zeile AWT, Swing, JavaFX & SWT 4
H Unterschiedliche JComboBox je JTable Zeile AWT, Swing, JavaFX & SWT 4
N Swing FileReader Zeile lesen AWT, Swing, JavaFX & SWT 5
C SWT Wie greife ich auf den Inhalt einer bestimmten Zeile zu? (TableViewer) AWT, Swing, JavaFX & SWT 7
F SWT Tabelle Zeile auslesen AWT, Swing, JavaFX & SWT 3
J Swing JTable: Komplette Zeile aber ohne Spalten markieren AWT, Swing, JavaFX & SWT 11
K Zeile verbinden AWT, Swing, JavaFX & SWT 2
G Zeile in JTable durch rechte Maustaste manipulieren AWT, Swing, JavaFX & SWT 4
S Swing AWT-Exception bei JTable mit JComboBox beim Löschen der letzten Zeile AWT, Swing, JavaFX & SWT 3
S Tabelle sortieren, mit Ausnahme der letzten Zeile AWT, Swing, JavaFX & SWT 9
P Aktuelle Zeile in JTextPane farblich hervorheben AWT, Swing, JavaFX & SWT 3
H Swing JComboBox in einer Zeile AWT, Swing, JavaFX & SWT 3
Meldanor Swing JTable - Eine neue Zeile vor einer bestehenden Einfügen AWT, Swing, JavaFX & SWT 2
F Zusätzliche Zeile in der GUI AWT, Swing, JavaFX & SWT 4
H Zeile in DefaultTableModel hinzufügen, ProgressBar AWT, Swing, JavaFX & SWT 4
H Markierte Zeile löschen AbstractTableModel AWT, Swing, JavaFX & SWT 10
R Zeile in JTable anhand von Wert einfärben AWT, Swing, JavaFX & SWT 2
M Jframe wie bekommt man bei den zeile einen header erzeugen AWT, Swing, JavaFX & SWT 2
N JTable, Zeile bleibt immer selektiert.... AWT, Swing, JavaFX & SWT 3
Dit_ JTextArea zu Zeile X scrollen AWT, Swing, JavaFX & SWT 4
M [erledigt] Bestimmte Zeile aus JTextArea löschen AWT, Swing, JavaFX & SWT 3
F Swing JTable: Problem beim zeile löschen AWT, Swing, JavaFX & SWT 3
J Swing JList... mehrere Strings in Zeile AWT, Swing, JavaFX & SWT 8
N Methode zum ermitteln der editierte Zeile/Zelle in jTable AWT, Swing, JavaFX & SWT 8
C Mit SelectionListener herausfinden welche zeile in Jtable angeklickt wurde AWT, Swing, JavaFX & SWT 5
E In JTable neue Zeile mit Tabulator einfügen AWT, Swing, JavaFX & SWT 5
M Text in txt-Datei in letzte Zeile schreiben? AWT, Swing, JavaFX & SWT 14
R JTable Hintergrund der Zeile abhängig von Inhalt einer Zelle verändern AWT, Swing, JavaFX & SWT 3
Developer_X Swing text von bestimmter zeile in jtextarea herausbekommen. AWT, Swing, JavaFX & SWT 12
R JTable Zeile löschen AWT, Swing, JavaFX & SWT 4
T MyTableCellRenderer selektiert nicht die ganze Zeile AWT, Swing, JavaFX & SWT 3
R FlowLayout: 1 Objekt pro Zeile AWT, Swing, JavaFX & SWT 5
D eigenes Tablemodel, Zeile löschen ArrayindexOOB excp AWT, Swing, JavaFX & SWT 4
C JTable mit RowSorter und Drag & Drop: Zeile verschieben AWT, Swing, JavaFX & SWT 4
P JTable zeile einfärben AWT, Swing, JavaFX & SWT 1
N Farbe einer einzelnen Zeile einer JTable ändern AWT, Swing, JavaFX & SWT 10
G Componente Zeile fixieren AWT, Swing, JavaFX & SWT 3
dl85hej bestimmte Zeile anspringen AWT, Swing, JavaFX & SWT 3
S Zeile an eine Tabelle anfügen AWT, Swing, JavaFX & SWT 5
R JTable: Zellen einer Zeile zusammenfassen? AWT, Swing, JavaFX & SWT 3
D JTable um eine Zeile erweitern AWT, Swing, JavaFX & SWT 4
P Tabellen in Java - Zeile anhängen AWT, Swing, JavaFX & SWT 19
GilbertGrape JTable - immer leere Zeile AWT, Swing, JavaFX & SWT 6
A JTable zeile auswählen AWT, Swing, JavaFX & SWT 2
A JXTable jede zweite Zeile einfärben AWT, Swing, JavaFX & SWT 4
S in JTable eine Zeile färben AWT, Swing, JavaFX & SWT 5
T JTable ohne Titel in der ersten Zeile AWT, Swing, JavaFX & SWT 2
K leere Zeile zu JTable zufügen AWT, Swing, JavaFX & SWT 2
T jtabel - Zeile selktierbar aber nicht editierbar AWT, Swing, JavaFX & SWT 2
E JTable letzte Zeile in Fett schrift? AWT, Swing, JavaFX & SWT 3
O JTable + event wenn andere Zeile selektiert ist AWT, Swing, JavaFX & SWT 5
J jTextarea Anzahl Zeichen in einer Zeile begrenzen AWT, Swing, JavaFX & SWT 2
O JTable Zeile zuweisen und weiter mit dem Button AWT, Swing, JavaFX & SWT 2
M JTable & Problem, das nicht die komplette Zeile gefärbt AWT, Swing, JavaFX & SWT 6
G JTable erste zeile fixieren wie in excel? AWT, Swing, JavaFX & SWT 3
Z JTable automatisch zu einer Zeile scrollen AWT, Swing, JavaFX & SWT 4
lolkind eine Zeile und Tabelle ist Rechtsbündig? AWT, Swing, JavaFX & SWT 3
G JTable Zeile zurückgeben AWT, Swing, JavaFX & SWT 4
D Herausfinden auf welche Zeile in einer JTable geklickt wurde AWT, Swing, JavaFX & SWT 2
F JTextPane aktive Zeile AWT, Swing, JavaFX & SWT 2
S JTable: Zeile unter MouseCursor farblich hervorheben AWT, Swing, JavaFX & SWT 2
N Trotz richtiger ListSelectionMode kann ich keine Zeile sel? AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben