JTable Dezimalzahlen eingeben

EdiGraef

Grünschnabel
beim erfassen von Dezimalzahlen (z.B. 2,25) in einer JTable
muss statt dem "," ein "." eingegeben werden.
Wie kann ich das umstellen?

Danke...
 
Hallo!

Veruschs mal hiermit:

Code:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.swing.DefaultCellEditor;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.TableColumn;

public class JTableDecimalDemo extends JFrame {

	private JTable table;
	//RegEx Pattern für Dezimalzahlen
	private Pattern DECIMAL_PATTERN = Pattern.compile("[+-]?\\d+.\\d+");
	//RegEx Pattern für Integerzahlen
	private Pattern INTEGER_PATTERN = Pattern.compile("[+-]?\\d+");

	public JTableDecimalDemo() {
		super("JTableDecimalDemo");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		table = new JTable(3, 3);
		final TableColumn clm = table.getColumnModel().getColumn(0);
		clm.setCellEditor(new DefaultCellEditor(new JTextField() {
			{
				addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent e) {

						String text = getText();

						Matcher matcher = INTEGER_PATTERN.matcher(text);

						boolean match = false;

						//Wenn das Integer Muster matcht ... .0 anhängen 
						if (matcher.matches()) {
							match = true;
							text += ".0";
						}

						
						text = text.replace(',', '.'); 
						matcher = DECIMAL_PATTERN.matcher(text);
						
						//Wenn das Dezimal Muster matcht ... ok
						if (matcher.matches()) {
							match = true;
						}

						//Wenn gematcht dann ändere den Wert im TableModel
						if (match) {
							table.getModel().setValueAt(
								text,
								table.getSelectedRow(),
								table.getSelectedColumn());
						} else {
							//Andernfalls Zeig eine Fehlermeldung ...
							JOptionPane.showMessageDialog(
								null,
								"Nur nummerische Werte erlaubt!",
								"Fehler",
								JOptionPane.ERROR_MESSAGE);
						}
					}
				});
			}
		}));

		getContentPane().add(table);

		pack();
		setVisible(true);
	}

	public static void main(String[] args) {
		new JTableDecimalDemo();
	}
}

Gruß Tom
 
Sonst würde Tom den Code auch nicht posten. ;)
Geh mal davon aus, dass er kurz antestet, ob der Code funktioniert. ;)
 
Zurück