Nur Double statt Sting oder Integer Combo sortieren und !

Status
Nicht offen für weitere Antworten.

rosch7

Mitglied
Ich habe 2 Comboxbox, die ich alphabitisch sortiren möchte, ich habe leider keine Ahnung wie es geht.

Code:
package Fehleranalyse;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenuBar;
import javax.swing.JTabbedPane;
import javax.swing.JToolBar;

public class Editor extends JFrame{

	private Ecu ecu;
	JButton save;
	

	public Editor() {
		methode();
	}

	public void methode() {
		
		ecu = new Ecu();
				
		JTabbedPane tp = new JTabbedPane();
		tp.add("ECU", ecu.getHauptPanel());
		this.getContentPane().setLayout(new BorderLayout());
		this.getContentPane().add(tp);

	}

	public static void main(String[] args) {
		Editor editor = new Editor();
		editor.setTitle("FehlermodellierungsEditor");
		editor.setSize(1000, 500);
		editor.setVisible(true);

	}	

}

//-----------------------------------------------------------------------------------------------------------------------------

package Fehleranalyse;

import java.util.Enumeration;

import java.util.Vector;

import javax.swing.table.AbstractTableModel;

public class MyTableModel extends AbstractTableModel {

	private Vector data = null;

	private boolean cellUpdated;

	protected int nextEmptyRow = 0;

	protected int numRows = 0;

	public MyTableModel() {
		data = new Vector();
		/*
		 * column = new Vector(); data.add(column);
		 */
	}

	public int getColumnCount() {
		return 2;
	}

	public int getRowCount() {
		if (data != null) {
			return data.size();
		} else
			return 0;

	}

	public String getColumnName(int col) {

		switch (col) {
		case 0:
			return "Fehlerart";
		case 1:
			return "Fehlerwahrscheinlichkeit";
		}
		return "non valid column index";
	}

	public Object getValueAt(int row, int col) {
		try {
			String[] rowData = (String[]) data.elementAt(row);

			if (col == 0) {
				return rowData[0];
			} else if (col == 1) {
				return rowData[1];
			}

		} catch (Exception e) {
			System.out.println("Fehler in der Methode getValueAt"
					+ e.getMessage());
		}
		return null;
	}

	public Class getColumnClass(int c) {
		return getValueAt(0, c).getClass();

	}

	public void setValueAt(Object value, int row, int col) {
		if(col == 0){
			if(notInDataVector((String)value)){
				String []tempStringArray = new String[2];
				tempStringArray[0] = value.toString();
				tempStringArray[1] = "";
				data.addElement(tempStringArray);
				this.fireTableDataChanged();
			} 
		}
		if(col == 1){
			String[]tempRowData = (String[])data.elementAt(row);
			tempRowData[1]= (String)value;
			data.setElementAt(tempRowData, row);
			this.fireTableDataChanged();
		}

	}

	private boolean notInDataVector(String value) {
		for(int i = 0; i < data.size(); i++){
			String[] tempArr = (String[])data.elementAt(i);
			if(tempArr[0].equals(value))
				return false;
		}
		return true;
	}
		
	public boolean isCellEditable(int row, int col) {

		if (col == 0) {
			return false;
		} else
			return true;

	}

	public void clearELement(int index) {

		data.removeElementAt(index);
		// prob.removeElementAt(index);
		this.fireTableDataChanged();

	}

	public void clearAll() {
		if (data != null) {
			data.removeAllElements();
			// prob.removeAllElements();
		}
	}

	public void setCellUpdated(boolean value) {
		cellUpdated = value;
	}

	public boolean getCellUpdated() {
		return cellUpdated;
	}

}
//----------------------------------------------------------------------------------------------------------------------
package Fehleranalyse;

import java.awt.Component;
import java.awt.event.ActionEvent;

import java.awt.event.KeyEvent;

import java.text.NumberFormat;
import java.text.ParseException;
import java.util.EventObject;

import javax.swing.AbstractAction;

import javax.swing.DefaultCellEditor;
import javax.swing.JFormattedTextField;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
import javax.swing.event.CellEditorListener;

import javax.swing.text.DefaultFormatterFactory;
import javax.swing.text.NumberFormatter;

public class MyCellEditor extends DefaultCellEditor {

	JFormattedTextField ftf;

	NumberFormat integerFormat;

	private boolean DEBUG = false;

	public MyCellEditor(int min, int max) {
		super(new JFormattedTextField());
		ftf = (JFormattedTextField) getComponent();

		// Set up the editor for the string cells.
		integerFormat = NumberFormat.getIntegerInstance();
		NumberFormatter intFormatter = new NumberFormatter(integerFormat);
		intFormatter.setFormat(integerFormat);
		intFormatter.setMinimum(new Integer(min));
		intFormatter.setMaximum(new Integer(max));

		ftf.setFormatterFactory(new DefaultFormatterFactory(intFormatter));
		ftf.setValue(new Integer(min));
		ftf.setHorizontalAlignment(JTextField.TRAILING);
		ftf.setFocusLostBehavior(JFormattedTextField.PERSIST);

		// React when the user presses Enter while the editor is
		// active. (Tab is handled as specified by
		// JFormattedTextField's focusLostBehavior property.)
		ftf.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0),"check");
		ftf.getActionMap().put("check", new AbstractAction() {
			public void actionPerformed(ActionEvent e) {
				if (!ftf.isEditValid()) { // The text is invalid.
					System.out.println("non valid value");
					ftf.postActionEvent();
				} else
					try { // The text is valid,
						ftf.commitEdit(); // so use it.
						ftf.postActionEvent(); // stop editing
					} catch (java.text.ParseException exc) {
					}
			}
		});
	}

	// Override to invoke setValue on the formatted text field.
	public Component getTableCellEditorComponent(JTable table, Object value,
			boolean isSelected, int row, int column) {
		JFormattedTextField ftf = (JFormattedTextField) super
				.getTableCellEditorComponent(table, value, isSelected, row,
						column);
		ftf.setValue(value);
		return ftf;
	}

	public Object getCellEditorValue() {
		JFormattedTextField ftf = (JFormattedTextField) getComponent();
		Object o = ftf.getValue();
		if (o instanceof Integer) {
			return o;
		} else if (o instanceof Number) {
			return new Integer(((Number) o).intValue());
		} else {
			try {
				return integerFormat.parseObject(o.toString());
			} catch (ParseException exc) {
				System.err.println("getCellEditorValue: can't parse o: " + o);
				return null;
			}
		}
	}

	public void cancelCellEditing() {
		// TODO Auto-generated method stub

	}

	public boolean stopCellEditing() {
		JFormattedTextField ftf = (JFormattedTextField) getComponent();
		if (ftf.isEditValid()) {
			try {
				ftf.commitEdit();

			} catch (java.text.ParseException exc) {
			}

		} else { // text is invalid
			System.out.println("non valid value");
			return false;
		}

		return super.stopCellEditing();

	}

	/*
	 * public boolean isCellEditable(EventObject arg0) { // TODO Auto-generated
	 * method stub return false; }
	 */
	/*public boolean shouldSelectCell(EventObject e) {
	 return;
	 }*/

}
//--------------------------------------------------------------------------------------------------------------------
package Fehleranalyse;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.BoxLayout;
import javax.swing.DefaultCellEditor;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JMenuBar;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.JToolBar;
import javax.swing.border.TitledBorder;
import javax.swing.table.TableCellEditor;
import java.awt.Color;

public class Ecu extends JPanel implements ActionListener {

	private int nextEmptyRow;

	JTextField ecuFehlertf = new JTextField();

	JButton ecuAddFehler;
	JButton ecuDeleteRow;
	JButton ecuDeleteFehler;

	JComboBox fehlercb = new JComboBox();

	JPanel ecuFehlerPanel = new JPanel();

	JTextField ecutf = new JTextField();

	JButton ecuAddEcu;
	JButton ecuDeleteEcu;
	JButton save;

	JComboBox ecucb = new JComboBox();

	JPanel ecuEcuPanel = new JPanel();
	JPanel panel = new JPanel();
	JPanel hauptPanel = new JPanel();
	JTable ecutable;

	TitledBorder titledBorder1;
	TitledBorder titledBorder2;

	private MyTableModel tablemodel;

	public Ecu() {
		init();
	}

	public void init() {
		
		tablemodel = new MyTableModel();
		ecutable = new JTable(tablemodel);
		JToolBar tb1 = new JToolBar();
		tb1.setRollover(true);
		tb1.setBorderPainted(false);

		JToolBar tb2 = new JToolBar();
		tb2.setRollover(true);
		tb2.setBorderPainted(false);
		// ecutable.getColumnModel().getColumn(1).setCellEditor(new
		// MyCellEditor(0, 100));
		ecutable.setDefaultEditor(Integer.class, new MyCellEditor(0, 100));
		titledBorder1 = new TitledBorder("Ecu_Item");
		titledBorder2 = new TitledBorder("Ecu_Fehler");

		ecuAddFehler = new JButton("Add");
		ecuDeleteFehler = new JButton("Delete");
		ecuDeleteRow = new JButton();

		Image imgDelete = getToolkit().getImage("./img/Delete.gif");
		ImageIcon deleteIcon = new ImageIcon(imgDelete);
		ecuDeleteRow.setIcon(deleteIcon);
		tb2.add(ecuDeleteRow);
		ecuDeleteRow.setPreferredSize(new Dimension(30, 30));
		ecuAddFehler.setActionCommand("Add Fehler");
		ecuDeleteFehler.setActionCommand("Delete Fehler");
		ecuDeleteRow.addActionListener(this);
		ecuDeleteRow.setActionCommand("delete");
		ecuAddFehler.addActionListener(this);
		ecuDeleteFehler.addActionListener(this);

		save = new JButton();
		save.setActionCommand("save");
		save.addActionListener(this);
		Image imgSave = getToolkit().getImage("./img/Save.gif");
		ImageIcon saveIcon = new ImageIcon(imgSave);
		save.setIcon(saveIcon);
		tb1.add(save);
		save.setPreferredSize(new Dimension(30, 30));
		ecuAddEcu = new JButton("Add");
		ecuDeleteEcu = new JButton("Delete");
		ecuAddEcu.setActionCommand("Add Ecu");
		ecuDeleteEcu.setActionCommand("Delete Ecu");
		ecuAddEcu.addActionListener(this);
		ecuDeleteEcu.addActionListener(this);

		hauptPanel.setLayout(new BoxLayout(hauptPanel, BoxLayout.Y_AXIS));

		ecuFehlertf.setPreferredSize(new Dimension(240, 20));
		fehlercb.setPreferredSize(new Dimension(240, 20));
		fehlercb.addItem("--Alle Fehler--");
		fehlercb.addItem("Kurzschluss");
		fehlercb.addItem("Stromausfall");
		fehlercb.addItem("Taktfehler");
		fehlercb.addItem("Reset");
		fehlercb.addActionListener(this);
		fehlercb.setActionCommand("fehlercb");
		ecucb.setActionCommand("ecucb");

		ecucb.addActionListener(this);

		ecucb.setPreferredSize(new Dimension(240, 20));
		ecutf.setPreferredSize(new Dimension(240, 20));
		ecucb.addItem("--Alle ECUs--");
		ecuEcuPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
		ecuEcuPanel.add(ecuAddEcu);
		ecuEcuPanel.add(ecuDeleteEcu);
		ecuEcuPanel.add(ecutf);
		ecuEcuPanel.setBorder(titledBorder1);
		ecuEcuPanel.add(ecucb);

		ecuFehlerPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
		ecuFehlerPanel.add(ecuAddFehler);
		ecuFehlerPanel.add(ecuDeleteFehler);
		ecuFehlerPanel.add(ecuFehlertf);
		ecuFehlerPanel.setBorder(titledBorder2);
		ecuFehlerPanel.add(fehlercb);

		panel.setLayout(new BorderLayout());

		panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
		panel.add(tb2);

		this.add(new JScrollPane(ecutable));
		this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));

		hauptPanel.add(tb1);
		hauptPanel.add(ecuEcuPanel);
		hauptPanel.add(ecuFehlerPanel);
		hauptPanel.add(panel);
		hauptPanel.add(this);

	} 

	public void actionPerformed(ActionEvent e) {

		String fehlerName = ecuFehlertf.getText();
		String ecuName = ecutf.getText();
		if (e.getActionCommand().equalsIgnoreCase("Add Fehler")) {
			if (!fehlerName.equals("") && !fehlerName.equals(null)) {
				boolean exist = false;
				for (int i = 0; i < fehlercb.getItemCount(); i++) {
					String item = fehlercb.getItemAt(i).toString();
					if (item.equalsIgnoreCase(fehlerName))
						exist = true;

				}
				if (!exist) {
					fehlercb.addItem(fehlerName);
					ecuFehlertf.removeAll();
				}
				ecuFehlertf.setText("");

			}

		}

		else if (e.getActionCommand().equalsIgnoreCase("Add Ecu")) {
			if (!ecuName.equals("") && !ecuName.equals(null)) {
				boolean exist = false;
				for (int i = 0; i < ecucb.getItemCount(); i++) {
					String item = ecucb.getItemAt(i).toString();
					if (item.equalsIgnoreCase(ecuName))
						exist = true;

				}
				if (!exist) {
					ecucb.addItem(ecuName);
					ecutf.removeAll();
				}
				ecutf.setText("");

			}

		} else if (e.getActionCommand().equalsIgnoreCase("save")) {
			String selectedItem = ecucb.getSelectedItem().toString();
			if (selectedItem == null
					|| selectedItem.equalsIgnoreCase("--Alle Ecus--")) {
				JOptionPane.showMessageDialog(new JFrame(),
						"Bitte wählen Sie eine ECU");

			} else {
				// TO DO
				JOptionPane.showMessageDialog(new JFrame(),
						"Die Schnittstelle wir noch implementiert...");

			}

		} else if (e.getActionCommand().equalsIgnoreCase("delete")) {
			int selectedRowIndex = ecutable.getSelectedRow();
			if (selectedRowIndex >= 0) {
				String value = tablemodel.getValueAt(selectedRowIndex, 0).toString();
				int YES_NO = JOptionPane.showConfirmDialog(new JFrame(),
						"Möchten Sie " + value + " wircklich löschen",
						"Delete Dialog", JOptionPane.YES_NO_OPTION);
				if (YES_NO == 0) {
					tablemodel.clearELement(selectedRowIndex);
				}
			} else {
				JOptionPane.showMessageDialog(new JFrame(),
						"Bitte selektieren Sie ein Element");
			}
		}

		else if (e.getActionCommand().equalsIgnoreCase("Delete Fehler")) {
			String selectedItem = fehlercb.getSelectedItem().toString();
			if (selectedItem != null
					&& !selectedItem.equalsIgnoreCase("--Alle Fehler--")) {
				fehlercb.removeItem(selectedItem);
				fehlercb.setSelectedItem("--Alle Fehler--");
				ecuFehlertf.removeAll();
				// tablemodel.clearELement(selectedItem);
			}
		} else if (e.getActionCommand().equalsIgnoreCase("Delete Ecu")) {
			String selectedItem = ecucb.getSelectedItem().toString();
			if (selectedItem != null
					&& !selectedItem.equalsIgnoreCase("--Alle Ecus--")) {
				ecucb.removeItem(selectedItem);
				ecucb.setSelectedItem("--Alle ECUs--");
				ecutf.removeAll();
			}
		} else if (e.getActionCommand().equalsIgnoreCase("ecucb")) {
			String selected = ecucb.getSelectedItem().toString();
			if (!selected.equalsIgnoreCase("--Alle Ecus--")) {
				tablemodel.clearAll();
				tablemodel.fireTableDataChanged();
			}

		} else if (e.getActionCommand().equalsIgnoreCase("fehlercb")) {
			String selectedInfehlercb = fehlercb.getSelectedItem().toString();
			String selectedInecucb = ecucb.getSelectedItem().toString();
			if (selectedInfehlercb != null && selectedInecucb != null
					&& !selectedInfehlercb.equalsIgnoreCase("--Alle Fehler--")
					&& !selectedInecucb.equalsIgnoreCase("--Alle Ecus--")) {
				nextEmptyRow = tablemodel.getRowCount();

				tablemodel.setValueAt(selectedInfehlercb, nextEmptyRow++, 0);
			}
		}
	}

	public JPanel getHauptPanel() {
		return hauptPanel;
	}
}
 

rosch7

Mitglied
Noch eine Frage: wie kann in der Tabellen nur einen Double eingeben statt Integer oder String, die Werte sollen auch seh klein sein (wäre auch besser Float statt Double)
 
B

Beni

Gast
Zu der ersten Frage:
Ich würde zuerst alle Elemente aus dem Model der ComboBox auslesen, und in einem Array speichern. Dann würde ich die Methode Arrays.sort aufrufen, um den Array zu sortieren (evtl. einen eigenen Comparator implementieren). Nachdem der Array sortiert wurde, kann man alles zurück in die ComboBox schreiben.
Etwas rafinierter wäre natürlich ein eigenes ComboBoxModel, welches eigenständig sortiert.

Zu der zweiten Frage:
Vom TableModel aus kannst du daran wenig ändern. Du benötigst einen neuen TableCellEditor. Der Editor ist eine beliebige Component, das könnte auch ein JFormattedTextField sein, welches nur Dezimalzahlen als Eingabe erlaubt.
 
B

Beni

Gast
Den CellEditor musst du der JTable übergeben (wo auch immer die im Code versteckt ist :bae:):
Code:
JTable table = ...  // deine Tabelle
TableCellEditor editor = ... // dein Editor

// Dein Model. Die Tabelle muss schon 2 Columns haben, 
// sonst kann man den Editor nicht auf diese Weise setzen.
table.setModel( ... ) 

// und den Editor setzen.
table.getColumnModel().getColumn( 1 ).setCellEditor( editor );

Zum sortieren: da wo du was einfügst :wink: (ok, ich verstehe dein Problem nicht. Etwas mehr Text dafür weniger Code wäre hilfreich).
Ich sehe erst jetzt, dass du direkt mit der JComboBox arbeitest. Einfacher wird es, wenn du ein eigenes ComboBoxModel (ist fast dasselbe wie ein TableModel, du wirst keine Probleme haben) implementierst. Dann kannst du bei den "hinzufüge"-Methoden gleich sortieren.

Und benutz mal die Codetags!
 
B

bygones

Gast
einfach den code in [ code ] bzw. [ /code ] (ohne die leerzeichen) setzen. bzw beim erstellen den button "Code" benutzen
 

rosch7

Mitglied
Code:
package Fehleranalyse;

import java.util.Vector;
import javax.swing.table.AbstractTableModel;

public class MyTableModel extends AbstractTableModel {

	static final long serialVersionUID = 123456780;

	private Vector /* of String[2] */data = null;

	private boolean cellUpdated;

	protected int nextEmptyRow = 0;

	protected int numRows = 0;

	public MyTableModel() {
		data = new Vector() /* of String[2] */;

	}

	public int getColumnCount() {
		return 2;
	}

	public int getRowCount() {
		if (data != null) {
			return data.size();
		} else
			return 0;

	}

	public String getColumnName(int col) {

		switch (col) {
		case 0:
			return "Fehlerart";
		case 1:
			return "Fehlerwahrscheinlichkeit";
		}
		return "non valid column index";
	}

	public Object getValueAt(int row, int col) {
		try {
			Object[] rowData = (Object[]) data.elementAt(row);

			if (col == 0) {
				return rowData[0].toString();
			} else if (col == 1) {
				return rowData[1].toString();
			}

		} catch (Exception e) {
			System.out.println("Fehler in der Methode MyTableModel.getValueAt"
					+ e.getMessage());
		}
		return null;
	}

	public Class getColumnClass(int c) {
		return getValueAt(0, c).getClass();

	}

	public void setValueAt(Object value, int row, int col) {

		if (col == 0) { 
			if (notInDataVector((String)value)){ 
			String[] tempStringArray = new String[2]; 
			tempStringArray[0] = value.toString(); 
			tempStringArray[1] = ""; 
			data.addElement(tempStringArray); 
			this.fireTableDataChanged(); 
			} 
			} 
			if (col==1){ 
			String[] tempRowData = (String[])data.elementAt(row); 
			tempRowData[1] = (String)value; 
			data.setElementAt(tempRowData,row); 
			this.fireTableDataChanged(); 
			} 



	}

	public boolean isCellEditable(int row, int col) {
		if (col == 0) {
			return false;
		} else {
			return true;
		}
	}

	public void clearELement(int index) {

		data.removeElementAt(index);
		this.fireTableDataChanged();

	}

	public void clearAll() {
		if (data != null) {
			data.removeAllElements();
		}
	}

	public void setCellUpdated(boolean value) {
		cellUpdated = value;
	}

	public boolean getCellUpdated() {
		return cellUpdated;
	}

	private boolean notInDataVector(Object value) {
		for (int i = 0; i < data.size(); i++) {
			Object[] tempArr = (Object[]) data.elementAt(i);
			if (tempArr[0].equals(value))
				return false;
		}
		return true;
	}
}
________________________________---------------------------------------------------
package Fehleranalyse;

import javax.swing.AbstractAction;
import javax.swing.DefaultCellEditor;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
import javax.swing.SwingUtilities;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.Component;
import java.awt.Toolkit;
import java.text.NumberFormat;
import java.text.ParseException;
import javax.swing.text.DefaultFormatterFactory;
import javax.swing.text.NumberFormatter;

public class MyCellEditor extends DefaultCellEditor implements KeyListener {
	
	JFormattedTextField ftf;
	NumberFormat integerFormat;

	private Integer minimum, maximum;
	private boolean DEBUG = false;

	public MyCellEditor(int min, int max) {
		super(new JFormattedTextField());
		ftf = (JFormattedTextField) getComponent();
		minimum = new Integer(min);
		maximum = new Integer(max);

		// Set up the editor for the integer cells.
		integerFormat = NumberFormat.getIntegerInstance();
		NumberFormatter intFormatter = new NumberFormatter(integerFormat);
		intFormatter.setFormat(integerFormat);
		intFormatter.setMinimum(minimum);
		intFormatter.setMaximum(maximum);

		ftf.setFormatterFactory(new DefaultFormatterFactory(intFormatter));
		ftf.setValue(minimum);
		ftf.setHorizontalAlignment(JTextField.TRAILING);
		ftf.setFocusLostBehavior(JFormattedTextField.PERSIST);
		ftf.addKeyListener(this);

	}

	// Override to invoke setValue on the formatted text field.
	public Component getTableCellEditorComponent(JTable table, Object value,
			boolean isSelected, int row, int column) {
		JFormattedTextField ftf = (JFormattedTextField) super
				.getTableCellEditorComponent(table, value, isSelected, row,
						column);
		ftf.setValue(value);
		return ftf;
	}

	// Override to ensure that the value remains an Integer.
	public Object getCellEditorValue() {
		JFormattedTextField ftf = (JFormattedTextField) getComponent();
		Object o = ftf.getValue();
		if (o instanceof Integer) {
			return o;
		} else if (o instanceof Number) {
			return new Integer(((Number) o).intValue());
		} else {
			if (DEBUG) {
				System.out.println("getCellEditorValue: o isn't a Number");
			}
			try {
				return integerFormat.parseObject(o.toString());
			} catch (ParseException exc) {
				System.err.println("getCellEditorValue: can't parse o: " + o);
				return null;
			}
		}
	}

	// Override to check whether the edit is valid,
	// setting the value if it is and complaining if
	// it isn't. If it's OK for the editor to go
	// away, we need to invoke the superclass's version
	// of this method so that everything gets cleaned up.

	public boolean stopCellEditing() {
		JFormattedTextField ftf = (JFormattedTextField) getComponent();
		if (ftf.isEditValid()) {
			try {
				ftf.commitEdit();
			} catch (java.text.ParseException exc) {
			}

		} else { // text is invalid
			if (!userSaysRevert()) { // user wants to edit
				return false; // don't let the editor go away
			}
		}
		return super.stopCellEditing();
	}

	/**
	 * Lets the user know that the text they entered is bad. Returns true if the
	 * user elects to revert to the last good value. Otherwise, returns false,
	 * indicating that the user wants to continue editing.
	 */
	protected boolean userSaysRevert() {
		Toolkit.getDefaultToolkit().beep();
		ftf.selectAll();
		Object[] options = { "Edit", "Revert" };
		int answer = JOptionPane.showOptionDialog(SwingUtilities
				.getWindowAncestor(ftf), "Der Wert soll zwischen " + minimum
				+ " und " + maximum, "Falscher Wert",
				JOptionPane.YES_NO_OPTION, JOptionPane.ERROR_MESSAGE, null,
				options, options[1]);

		if (answer == 1) { // Revert!
			ftf.setValue(ftf.getValue());
			return true;
		}
		return false;
	}

	public void keyPressed(KeyEvent e) {
		int id = e.getID();
		if (id == KeyEvent.VK_ENTER)
			if (!ftf.isEditValid()) { // The text is invalid.
				if (userSaysRevert()) { // reverted
					ftf.postActionEvent(); // inform the editor
				}
			} else
				try { // The text is valid,
					ftf.commitEdit(); // so use it.
					ftf.postActionEvent(); // stop editing
				} catch (java.text.ParseException exc) {
				}
	}

	public void keyReleased(KeyEvent arg0) {
		// TODO Auto-generated method stub

	}

	public void keyTyped(KeyEvent arg0) {
		// TODO Auto-generated method stub

	}

}

-______________________________________---------------------------------------------------

package Fehleranalyse;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.BoxLayout;
import javax.swing.DefaultCellEditor;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JMenuBar;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.JToolBar;
import javax.swing.border.TitledBorder;
import javax.swing.table.TableCellEditor;

public class Ecu extends JPanel implements ActionListener {

	private int nextEmptyRow;

	JTextField ecuFehlertf = new JTextField();

	JButton ecuAddFehler;

	JButton ecuDeleteRow;

	JButton ecuDeleteFehler;

	JComboBox fehlercb = new JComboBox();

	JPanel ecuFehlerPanel = new JPanel();

	JTextField ecutf = new JTextField();

	JButton ecuAddEcu;

	JButton ecuDeleteEcu;

	JButton save;

	JComboBox ecucb = new JComboBox();

	JPanel ecuEcuPanel = new JPanel();

	JPanel panel = new JPanel();

	JPanel hauptPanel = new JPanel();

	JTable ecutable;

	TitledBorder titledBorder1;

	TitledBorder titledBorder2;

	private MyTableModel tablemodel;

	public Ecu() {
		init();
	}

	public void init() {

		tablemodel = new MyTableModel();
		ecutable = new JTable(tablemodel);
		JToolBar tb1 = new JToolBar();
		tb1.setRollover(true);
		tb1.setBorderPainted(false);

		JToolBar tb2 = new JToolBar();
		tb2.setRollover(true);
		tb2.setBorderPainted(false);
		// ecutable.getColumnModel().getColumn(1).setCellEditor(new
		// MyCellEditor(0, 1));
		ecutable.setDefaultEditor(Integer.class, new MyCellEditor(0, 1));
		titledBorder1 = new TitledBorder("Ecu_Item");
		titledBorder2 = new TitledBorder("Ecu_Fehler");

		ecuAddFehler = new JButton("Add");
		ecuDeleteFehler = new JButton("Delete");
		ecuDeleteRow = new JButton();

		Image imgDelete = getToolkit().getImage("./img/Delete.gif");
		ImageIcon deleteIcon = new ImageIcon(imgDelete);
		ecuDeleteRow.setIcon(deleteIcon);
		tb2.add(ecuDeleteRow);
		ecuDeleteRow.setPreferredSize(new Dimension(30, 30));
		ecuAddFehler.setActionCommand("Add Fehler");
		ecuDeleteFehler.setActionCommand("Delete Fehler");
		ecuDeleteRow.addActionListener(this);
		ecuDeleteRow.setActionCommand("delete");
		ecuAddFehler.addActionListener(this);
		ecuDeleteFehler.addActionListener(this);

		save = new JButton();
		save.setActionCommand("save");
		save.addActionListener(this);
		Image imgSave = getToolkit().getImage("./img/Save.gif");
		ImageIcon saveIcon = new ImageIcon(imgSave);
		save.setIcon(saveIcon);
		tb1.add(save);
		save.setPreferredSize(new Dimension(30, 30));
		ecuAddEcu = new JButton("Add");
		ecuDeleteEcu = new JButton("Delete");
		ecuAddEcu.setActionCommand("Add Ecu");
		ecuDeleteEcu.setActionCommand("Delete Ecu");
		ecuAddEcu.addActionListener(this);
		ecuDeleteEcu.addActionListener(this);

		hauptPanel.setLayout(new BoxLayout(hauptPanel, BoxLayout.Y_AXIS));

		ecuFehlertf.setPreferredSize(new Dimension(280, 20));
		fehlercb.setPreferredSize(new Dimension(280, 20));
		fehlercb.addItem("--Alle Fehler--");
		fehlercb.addItem("Kurzschluss");
		fehlercb.addItem("Stromausfall");
		fehlercb.addItem("Taktfehler");
		fehlercb.addItem("Reset");
		fehlercb.addActionListener(this);
		fehlercb.setActionCommand("fehlercb");
		// fehlercb.addItemListener(this);
		ecucb.setActionCommand("ecucb");

		ecucb.addActionListener(this);

		ecucb.setPreferredSize(new Dimension(280, 20));
		ecutf.setPreferredSize(new Dimension(280, 20));
		ecucb.addItem("--Alle ECUs--");
		ecuEcuPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
		ecuEcuPanel.add(ecuAddEcu);
		ecuEcuPanel.add(ecuDeleteEcu);
		ecuEcuPanel.add(ecutf);
		ecuEcuPanel.setBorder(titledBorder1);
		// ecuEcuPanel.se
		ecuEcuPanel.add(ecucb);

		ecuFehlerPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
		ecuFehlerPanel.add(ecuAddFehler);
		ecuFehlerPanel.add(ecuDeleteFehler);
		ecuFehlerPanel.add(ecuFehlertf);
		ecuFehlerPanel.setBorder(titledBorder2);
		ecuFehlerPanel.add(fehlercb);

		panel.setLayout(new BorderLayout());

		panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
		panel.add(tb2);

		this.add(new JScrollPane(ecutable));
		this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));

		hauptPanel.add(tb1);
		hauptPanel.add(ecuEcuPanel);
		hauptPanel.add(ecuFehlerPanel);
		hauptPanel.add(panel);
		hauptPanel.add(this);

	} /*
	 * (non-Javadoc)
	 * 
	 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
	 */

	public void actionPerformed(ActionEvent e) {

		String fehlerName = ecuFehlertf.getText();
		String ecuName = ecutf.getText();
		if (e.getActionCommand().equalsIgnoreCase("Add Fehler")) {
			if (!fehlerName.equals("") && !fehlerName.equals(null)) {
				boolean exist = false;
				for (int i = 0; i < fehlercb.getItemCount(); i++) {
					String item = fehlercb.getItemAt(i).toString();
					if (item.equalsIgnoreCase(fehlerName))
						exist = true;

				}
				if (!exist) {
					fehlercb.addItem(fehlerName);
					ecuFehlertf.removeAll();
				}
				ecuFehlertf.setText("");

			}

		}

		else if (e.getActionCommand().equalsIgnoreCase("Add Ecu")) {
			if (!ecuName.equals("") && !ecuName.equals(null)) {
				boolean exist = false;
				for (int i = 0; i < ecucb.getItemCount(); i++) {
					String item = ecucb.getItemAt(i).toString();
					if (item.equalsIgnoreCase(ecuName))
						exist = true;

				}
				if (!exist) {
					ecucb.addItem(ecuName);
					ecutf.removeAll();
				}
				ecutf.setText("");

			}

		} else if (e.getActionCommand().equalsIgnoreCase("save")) {
			String selectedItem = ecucb.getSelectedItem().toString();
			if (selectedItem == null
					|| selectedItem.equalsIgnoreCase("--Alle Ecus--")) {
				JOptionPane.showMessageDialog(new JFrame(),
						"Bitte wählen Sie eine ECU");

			} else {
				// TO DO
				JOptionPane.showMessageDialog(new JFrame(),
						"Die Schnittstelle wir noch implementiert...");

			}

		} else if (e.getActionCommand().equalsIgnoreCase("delete")) {
			int selectedRowIndex = ecutable.getSelectedRow();
			if (selectedRowIndex >= 0) {
				String value = tablemodel.getValueAt(selectedRowIndex, 0)
						.toString();
				int YES_NO = JOptionPane.showConfirmDialog(new JFrame(),
						"Möchten Sie " + "\"" + value + "\""
								+ " wircklich löschen?", "Delete Dialog",
						JOptionPane.YES_NO_OPTION);
				if (YES_NO == 0) {
					tablemodel.clearELement(selectedRowIndex);
				}
			} else {
				JOptionPane.showMessageDialog(new JFrame(),
						"Bitte selektieren Sie ein Element");
			}
		}

		else if (e.getActionCommand().equalsIgnoreCase("Delete Fehler")) {
			String selectedItem = fehlercb.getSelectedItem().toString();
			if (selectedItem != null
					&& !selectedItem.equalsIgnoreCase("--Alle Fehler--")) {
				fehlercb.removeItem(selectedItem);
				fehlercb.setSelectedItem("--Alle Fehler--");
				ecuFehlertf.removeAll();
				// tablemodel.clearELement(selectedItem);
			}
		} else if (e.getActionCommand().equalsIgnoreCase("Delete Ecu")) {
			String selectedItem = ecucb.getSelectedItem().toString();
			if (selectedItem != null
					&& !selectedItem.equalsIgnoreCase("--Alle Ecus--")) {
				ecucb.removeItem(selectedItem);
				ecucb.setSelectedItem("--Alle ECUs--");
				ecutf.removeAll();
			}
		} else if (e.getActionCommand().equalsIgnoreCase("ecucb")) {
			String selected = ecucb.getSelectedItem().toString();
			if (!selected.equalsIgnoreCase("--Alle Ecus--")) {
				tablemodel.clearAll();
				tablemodel.fireTableDataChanged();
			}

		} else if (e.getActionCommand().equalsIgnoreCase("fehlercb")) {
			String selectedInfehlercb = fehlercb.getSelectedItem().toString();
			String selectedInecucb = ecucb.getSelectedItem().toString();
			if (selectedInfehlercb != null && selectedInecucb != null
					&& !selectedInfehlercb.equalsIgnoreCase("--Alle Fehler--")
					&& !selectedInecucb.equalsIgnoreCase("--Alle Ecus--")) {
				nextEmptyRow = tablemodel.getRowCount();

				tablemodel.setValueAt(selectedInfehlercb, nextEmptyRow++, 0);
			}
		}
	}

	public JPanel getHauptPanel() {
		return hauptPanel;
	}
}
________________________________-----------------------------------------------------

package Fehleranalyse;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenuBar;
import javax.swing.JTabbedPane;
import javax.swing.JToolBar;

public class Editor extends JFrame{

	private Ecu ecu;
	JButton save;
	

	public Editor() {
		methode();
	}

	public void methode() {
		
		ecu = new Ecu();
		
		JTabbedPane tp = new JTabbedPane();
		tp.add("ECU", ecu.getHauptPanel());
		
		this.getContentPane().setLayout(new BorderLayout());
		this.getContentPane().add(tp);

	}

	public static void main(String[] args) {
		Editor editor = new Editor();
		editor.setTitle("FehlermodellierungsEditor");
		editor.setSize(1000, 500);
		editor.setVisible(true);

	}

	

}
_____________________________-------------------------------------------
 
B

bygones

Gast
was soll dieser ganze "danke" schwachsinn ?

nett dass man sich bedankt, warum löscht du die Fragen ?
 

rosch7

Mitglied
Ich habe eingentlich meinen Code geändert, wollte andere Fragen stellen... Nicht böse gemeint
Wenn ich in der Tabelle "Fehlerwahrscheinlichkeit" einen sehr kleinen Wert eingeben denn wird nicht akzeptieren, und von Anfang an steht die "0" auf der rechten Seite, wenn kann ich denn "0" auf dr linkesn Seite schieben???
Bis jetzt habe ich nicht geschafft die Combox alphabitisch zu sortieren!!!

Code:
package Fehleranalyse;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.BoxLayout;
import javax.swing.DefaultCellEditor;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JMenuBar;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.JToolBar;
import javax.swing.border.TitledBorder;
import javax.swing.table.TableCellEditor;
import java.awt.Color;

class Ecu extends JPanel implements ActionListener {

	private int nextEmptyRow;

	JTextField ecuFehlertf = new JTextField();

	JButton ecuAddFehler;
	JButton ecuDeleteRow;
	JButton ecuDeleteFehler;
	JButton ecuAddEcu;
	JButton ecuDeleteEcu;
	JButton save;

	JComboBox fehlercb = new JComboBox();
	JPanel ecuFehlerPanel = new JPanel();
	JTextField ecutf = new JTextField();
	JComboBox ecucb = new JComboBox();

	JPanel ecuEcuPanel = new JPanel();
	JPanel panel = new JPanel();
	JPanel hauptPanel = new JPanel();

	JTable ecutable;

	TitledBorder titledBorder1;
	TitledBorder titledBorder2;

	private MyTableModel tablemodel;

	public Ecu() {
		init();
	}

	public void init() {

		tablemodel = new MyTableModel();
		ecutable = new JTable(tablemodel);
		JToolBar tb1 = new JToolBar();
		tb1.setRollover(true);
		tb1.setBorderPainted(false);

		JToolBar tb2 = new JToolBar();
		tb2.setRollover(true);
		tb2.setBorderPainted(false);
		ecutable.setDefaultEditor(Float.class, new MyCellEditor(0, 1));
		titledBorder1 = new TitledBorder("Ecu_Item");
		titledBorder2 = new TitledBorder("Ecu_Fehler");

		ecuAddFehler = new JButton("Add");
		ecuDeleteFehler = new JButton("Delete");
		ecuDeleteRow = new JButton();

		Image imgDelete = getToolkit().getImage("./img/Delete.gif");
		ImageIcon deleteIcon = new ImageIcon(imgDelete);
		ecuDeleteRow.setIcon(deleteIcon);
		tb2.add(ecuDeleteRow);
		ecuDeleteRow.setPreferredSize(new Dimension(30, 30));
		ecuAddFehler.setActionCommand("Add Fehler");
		ecuDeleteFehler.setActionCommand("Delete Fehler");
		ecuDeleteRow.addActionListener(this);
		ecuDeleteRow.setActionCommand("delete");
		ecuAddFehler.addActionListener(this);
		ecuDeleteFehler.addActionListener(this);

		save = new JButton();
		save.setActionCommand("save");
		save.addActionListener(this);
		Image imgSave = getToolkit().getImage("./img/Save.gif");
		ImageIcon saveIcon = new ImageIcon(imgSave);
		save.setIcon(saveIcon);
		tb1.add(save);
		save.setPreferredSize(new Dimension(30, 30));
		ecuAddEcu = new JButton("Add");
		ecuDeleteEcu = new JButton("Delete");
		ecuAddEcu.setActionCommand("Add Ecu");
		ecuDeleteEcu.setActionCommand("Delete Ecu");
		ecuAddEcu.addActionListener(this);
		ecuDeleteEcu.addActionListener(this);

		hauptPanel.setLayout(new BoxLayout(hauptPanel, BoxLayout.Y_AXIS));

		ecuFehlertf.setPreferredSize(new Dimension(280, 20));
		fehlercb.setPreferredSize(new Dimension(280, 20));
		fehlercb.addItem("--Alle Fehler--");
		fehlercb.addItem("Kurzschluss");
		fehlercb.addItem("Stromausfall");
		fehlercb.addItem("Taktfehler");
		fehlercb.addItem("Reset");
		fehlercb.addActionListener(this);
		fehlercb.setActionCommand("fehlercb");
		 
		ecucb.setActionCommand("ecucb");
		ecucb.addActionListener(this);

		ecucb.setPreferredSize(new Dimension(280, 20));
		ecutf.setPreferredSize(new Dimension(280, 20));
		ecucb.addItem("--Alle ECUs--");
		ecuEcuPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
		ecuEcuPanel.add(ecuAddEcu);
		ecuEcuPanel.add(ecuDeleteEcu);
		ecuEcuPanel.add(ecutf);
		ecuEcuPanel.setBorder(titledBorder1);
		ecuEcuPanel.add(ecucb);

		ecuFehlerPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
		ecuFehlerPanel.add(ecuAddFehler);
		ecuFehlerPanel.add(ecuDeleteFehler);
		ecuFehlerPanel.add(ecuFehlertf);
		ecuFehlerPanel.setBorder(titledBorder2);
		ecuFehlerPanel.add(fehlercb);

		panel.setLayout(new BorderLayout());

		panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
		panel.add(tb2);

		this.add(new JScrollPane(ecutable));
		this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));

		hauptPanel.add(tb1);
		hauptPanel.add(ecuEcuPanel);
		hauptPanel.add(ecuFehlerPanel);
		hauptPanel.add(panel);
		hauptPanel.add(this);

	} /* 
	 * (non-Javadoc) 
	 * 
	 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent) 
	 */

	public void actionPerformed(ActionEvent e) {

		String fehlerName = ecuFehlertf.getText();
		String ecuName = ecutf.getText();
		if (e.getActionCommand().equalsIgnoreCase("Add Fehler")) {
			if (!fehlerName.equals("") && !fehlerName.equals(null)) {
				boolean exist = false;
				for (int i = 0; i < fehlercb.getItemCount(); i++) {
					String item = fehlercb.getItemAt(i).toString();
					if (item.equalsIgnoreCase(fehlerName))
						exist = true;

				}
				if (!exist) {
					fehlercb.addItem(fehlerName);
					ecuFehlertf.removeAll();
				}
				ecuFehlertf.setText("");

			}

		}

		else if (e.getActionCommand().equalsIgnoreCase("Add Ecu")) {
			if (!ecuName.equals("") && !ecuName.equals(null)) {
				boolean exist = false;
				for (int i = 0; i < ecucb.getItemCount(); i++) {
					String item = ecucb.getItemAt(i).toString();
					if (item.equalsIgnoreCase(ecuName))
						exist = true;

				}
				if (!exist) {
					ecucb.addItem(ecuName);
					ecutf.removeAll();
				}
				ecutf.setText("");

			}

		} else if (e.getActionCommand().equalsIgnoreCase("save")) {
			String selectedItem = ecucb.getSelectedItem().toString();
			if (selectedItem == null
					|| selectedItem.equalsIgnoreCase("--Alle Ecus--")) {
				JOptionPane.showMessageDialog(new JFrame(),
						"Bitte wählen Sie eine ECU");

			} else {
				// TO DO 
				JOptionPane.showMessageDialog(new JFrame(),
						"Die Schnittstelle wir noch implementiert...");

			}

		} else if (e.getActionCommand().equalsIgnoreCase("delete")) {
			int selectedRowIndex = ecutable.getSelectedRow();
			if (selectedRowIndex >= 0) {
				String value = tablemodel.getValueAt(selectedRowIndex, 0)
						.toString();
				int YES_NO = JOptionPane.showConfirmDialog(new JFrame(),
						"Möchten Sie " + "\"" + value + "\""
				+ " wircklich  löschen?", "Delete Dialog",
						JOptionPane.YES_NO_OPTION);
				if (YES_NO == 0) {
					tablemodel.clearELement(selectedRowIndex);
				}
			} else {
				JOptionPane.showMessageDialog(new JFrame(),
						"Bitte selektieren Sie ein Element");
			}
		}

		else if (e.getActionCommand().equalsIgnoreCase("Delete Fehler")) {
			String selectedItem = fehlercb.getSelectedItem().toString();
			if (selectedItem != null
					&& !selectedItem.equalsIgnoreCase("--Alle Fehler--")) {
				fehlercb.removeItem(selectedItem);
				fehlercb.setSelectedItem("--Alle Fehler--");
				ecuFehlertf.removeAll();
				
			}
		} else if (e.getActionCommand().equalsIgnoreCase("Delete Ecu")) {
			String selectedItem = ecucb.getSelectedItem().toString();
			if (selectedItem != null
					&& !selectedItem.equalsIgnoreCase("--Alle Ecus--")) {
				ecucb.removeItem(selectedItem);
				ecucb.setSelectedItem("--Alle ECUs--");
				ecutf.removeAll();
			}
		} else if (e.getActionCommand().equalsIgnoreCase("ecucb")) {
			String selected = ecucb.getSelectedItem().toString();
			if (!selected.equalsIgnoreCase("--Alle Ecus--")) {
				tablemodel.clearAll();
				tablemodel.fireTableDataChanged();
			}

		} else if (e.getActionCommand().equalsIgnoreCase("fehlercb")) {
			String selectedInfehlercb = fehlercb.getSelectedItem().toString();
			String selectedInecucb = ecucb.getSelectedItem().toString();
			if (selectedInfehlercb != null && selectedInecucb != null
					&& !selectedInfehlercb.equalsIgnoreCase("--Alle Fehler--")
					&& !selectedInecucb.equalsIgnoreCase("--Alle Ecus--")) {

				nextEmptyRow = tablemodel.getRowCount();
				tablemodel.addValue(selectedInfehlercb, 0f);

			}
		}
	}				

	public JPanel getHauptPanel() {
		return hauptPanel;
	}
}
*****************************************************************+
package Fehleranalyse;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;

import javax.swing.table.AbstractTableModel;

public class MyTableModel extends AbstractTableModel{
//private Vector data = null;
private List names = new ArrayList();  // Liste mit Strings 
private List values = new ArrayList(); // Liste mit Floats 	

	protected int nextEmptyRow = 0;
	protected int numRows = 0;
	private boolean cellUpdated;
	
	public MyTableModel() {
		
	}

	public int getColumnCount() {
		return 2;
	}

	public int getRowCount() {
	return names.size(); 

	}

	public String getColumnName(int col) {
		
		switch (col) {
		case 0: return "Fehlerart";
		case 1: return "Fehlerwahrscheinlichkeit";
		}
		return "non valid column index";
	}

	public Object getValueAt(int row, int col) {
	if( col == 0 ) 
	         return names.get( row ); 
	      else 
	         return values.get( row ); 
	
	}

	public Class getColumnClass(int c) {
	switch( c ){ 
                 case 0: return String.class; 
                 case 1: return Float.class; 
                 default: return null; 
     } 

	}
	public void addValue( String name, float probability ){ 
	      names.add( name ); 
	      values.add( new Float( probability )); 
	    	       
	      int row = getRowCount()-1; 
	      fireTableRowsInserted( row, row ); 
	   } 

	public void setValueAt(Object value, int row, int col) {
//		rowData[col]= data.toArray();
//		rowData[row][col] = value;
//		
//        fireTableCellUpdated(row, col);
//
//		
//	}
		/*System.out.println("At setValue() row="+row+"col="+col);
		int index = -1;
		boolean found = false;
		boolean addedRow = false;
		int i = 0;
		while (!found && (i < nextEmptyRow)) {
			String el = (String) data.elementAt(i);
			if (el.equals(value)) {
				found = true;
				index = i;
			} else {
				i++;
			}
		}

		if (found) { // update
			setCellUpdated(true);
			data.setElementAt(value, index);

			this.fireTableRowsUpdated(row, col);
		} else { // füge neu Zeile
			if (numRows <= nextEmptyRow) {
				// add a row
				numRows++;
				addedRow = true;
				index = nextEmptyRow;
				data.addElement(value);
				fireTableRowsInserted(index, index);
			}

		}

		nextEmptyRow++;*/
		/*System.out.println("Setting value at " + row + "," + col
                + " to " + value
                + " (an instance of "
                + value.getClass() + ")");
		/*
		 * if (!data.contains(value) && data.isEmpty()) {
		 * 
		 * 
		 * data.insertElementAt(value, row); row++; this.fireTableDataChanged(); }
		 * else { data.setElementAt(value, row); this.fireTableCellUpdated(row,
		 * col); }
		 */
		if( col == 0 ) 
	         names.set( row, value ); 
		else
	         {values.set( row, value );} 
	       
	}

	public boolean isCellEditable(int row, int col) {

		if (col == 0) {
		return false;
		} else
			return true;
	}
	
	public void clearELement(int index) {
                    names.remove( index ); 
	    values.remove( index ); 
	    this.fireTableDataChanged(); 

	}

	public void clearAll() {
	    names.clear(); 
	    values.clear(); 
	    fireTableDataChanged(); 
	}

	public void setCellUpdated(boolean value) {
		cellUpdated = value;
	}

	public boolean getCellUpdated() {
		return cellUpdated;
	  }
	}
************************************************
package Fehleranalyse;

import javax.swing.AbstractAction;
import javax.swing.DefaultCellEditor;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
import javax.swing.SwingUtilities;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.Component;
import java.awt.Toolkit;
import java.text.NumberFormat;
import java.text.ParseException;
import javax.swing.text.DefaultFormatterFactory;
import javax.swing.text.NumberFormatter;

public class MyCellEditor extends DefaultCellEditor implements KeyListener {
	JFormattedTextField ftf;
	NumberFormat numberFormat; 

	private Float minimum, maximum;
	private boolean DEBUG = false;

	public MyCellEditor(float min, float max) { 
	      super(new JFormattedTextField()); 
	      ftf = (JFormattedTextField) getComponent(); 
	      minimum = new Float(min); 
	      maximum = new Float(max);       
	      // Set up the editor for the integer cells. 
	      numberFormat = NumberFormat.getNumberInstance(); 
	      NumberFormatter intFormatter = new NumberFormatter(numberFormat); 
	      intFormatter.setFormat(numberFormat); 
	      intFormatter.setMinimum(minimum); 
	      intFormatter.setMaximum(maximum); 

	      ftf.setFormatterFactory(new DefaultFormatterFactory(intFormatter)); 
	      ftf.setValue(minimum); 
	      ftf.setHorizontalAlignment(JTextField.TRAILING); 
	      ftf.setFocusLostBehavior(JFormattedTextField.PERSIST); 
	      ftf.addKeyListener(this); 

	   } 

	   // Override to invoke setValue on the formatted text field. 
	   public Component getTableCellEditorComponent(JTable table, Object value, 
	         boolean isSelected, int row, int column) { 
	      JFormattedTextField ftf = (JFormattedTextField) super.getTableCellEditorComponent(table, value, isSelected, row, column); 
	      ftf.setValue(value); 
	       
	      return ftf; 
	   } 

	   // Override to ensure that the value remains an Integer. 
	   public Object getCellEditorValue() { 
	      JFormattedTextField ftf = (JFormattedTextField) getComponent(); 
	      Object o = ftf.getValue(); 
	      if (o instanceof Float) { 
	         return o; 
	      } else if (o instanceof Number) { 
	         return new Float(((Number) o).floatValue()); 
	      } else { 
	         if (DEBUG) { 
	            System.out.println("getCellEditorValue: o isn't a Number"); 
	         } 
	         try { 
	            return numberFormat.parseObject(o.toString()); 
	         } catch (ParseException exc) { 
	            System.err.println("getCellEditorValue: can't parse o: " + o); 
	            return null; 
	         } 
	      } 
	   } 

	   // Override to check whether the edit is valid, 
	   // setting the value if it is and complaining if 
	   // it isn't. If it's OK for the editor to go 
	   // away, we need to invoke the superclass's version 
	   // of this method so that everything gets cleaned up. 

	   public boolean stopCellEditing() { 
	      JFormattedTextField ftf = (JFormattedTextField) getComponent(); 
	      if (ftf.isEditValid()) { 
	         try { 
	            ftf.commitEdit(); 
	         } catch (java.text.ParseException exc) { 
	         } 

	      } else { // text is invalid 
	         if (!userSaysRevert()) { // user wants to edit 
	            return false; // don't let the editor go away 
	         } 
	      } 
	      return super.stopCellEditing(); 
	   } 

	   /** 
	    * Lets the user know that the text they entered is bad. Returns true if the 
	    * user elects to revert to the last good value. Otherwise, returns false, 
	    * indicating that the user wants to continue editing. 
	    */ 
	   protected boolean userSaysRevert() { 
	      Toolkit.getDefaultToolkit().beep(); 
	      ftf.selectAll(); 
	      Object[] options = { "Edit", "Revert" }; 
	      int answer = JOptionPane.showOptionDialog(SwingUtilities 
	            .getWindowAncestor(ftf), "Der Wert soll zwischen " + minimum 
	            + " und " + maximum, "Falscher Wert", 
	            JOptionPane.YES_NO_OPTION, JOptionPane.ERROR_MESSAGE, null, 
	            options, options[1]); 

	      if (answer == 1) { // Revert! 
	         ftf.setValue(ftf.getValue()); 
	         return true; 
	      } 
	      return false; 
	   } 

	   public void keyPressed(KeyEvent e) { 
	      int id = e.getID(); 
	      if (id == KeyEvent.VK_ENTER) 
	         if (!ftf.isEditValid()) { // The text is invalid. 
	            if (userSaysRevert()) { // reverted 
	               ftf.postActionEvent(); // inform the editor 
	            } 
	         } else 
	            try { // The text is valid, 
	               ftf.commitEdit(); // so use it. 
	               ftf.postActionEvent(); // stop editing 
	            } catch (java.text.ParseException exc) { 
	            } 
	   } 

	   public void keyReleased(KeyEvent arg0) { 
	      // TODO Auto-generated method stub 

	   } 

	   public void keyTyped(KeyEvent arg0) { 
	      // TODO Auto-generated method stub 

	   } 

	} 
*************************************************

package Fehleranalyse;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenuBar;
import javax.swing.JTabbedPane;
import javax.swing.JToolBar;

class Editor extends JFrame { 

	   private Ecu ecu; 

	   JButton save; 

	   public Editor() { 
	      methode(); 
	   } 

	   public void methode() { 

	      ecu = new Ecu(); 

	      JTabbedPane tp = new JTabbedPane(); 
	      tp.add("ECU", ecu.getHauptPanel()); 

	      this.getContentPane().setLayout(new BorderLayout()); 
	      this.getContentPane().add(tp); 

	   } 

	   public static void main(String[] args) { 
	      Editor editor = new Editor(); 
	      editor.setTitle("FehlermodellierungsEditor"); 
	      editor.setSize(1000, 500); 
	      editor.setVisible(true); 

	   } 
}
*************************************
 

L-ectron-X

Gesperrter Benutzer
@rosch7
1. Wenn du deine Eingangsfrage nicht wieder in dein erstes Posting setzt, sperre ich den ganzen Thread!
Oder besser, ich lösche ihn, weil er so wie er ist niemandem mehr nutzen wird. Und Nutzloses haue ich eben in den Müll. :?

2. Halte dich an die Boardregeln!
 
B

Beni

Gast
Wenn du eine Antwort nicht verstehst, darfst du gerne an anderen Orten nachfragen. Nur sei so nett, und sag den Leuten dort, was du schon bekommen hast:

Beni hat gesagt.:
rosch7 hat gesagt.:
Also auch die Methode "ftf.setHorizontalAlignment( JFormattedTextField.LEADING );" hilft nicht, zwar kommt die 0 auf der linkeSeite um zu edietern danach geht wieder auf der rechte Seite. Die Fehlerwarhscheinlichkeit ist sehr klein zwischen 0 und 1, d.h ich darf auch z.B 10E-50 eingeben...

Was heisst da "hilft nicht", immerhin funktioniert schon mal die erste Hälfte. Ein bisschen mehr Optimismus! :wink:

Für die normale Darstellung muss man eingen eigenen Renderer installieren. Du kannst mal bei der Tabelle einen neuen "DefaultTableCellRenderer" für die Klasse "Float" installieren:
Code:
table.setDefaultRenderer( Float.class, new DefaultTableCellRenderer()  );

Dieser Renderer ruft die "toString"-Methode auf, und stellt den Inhalt dann an der linken Seite dar (das ist ein JLabel, entsprechend könntest du den Text auch in der Mitte oder rechts darstellen lassen).

Bei dem Problem der kleinen Zahlen: die sind wahrscheinlich einfach zu klein für einen float. Du kannst dir hier mal den Wertebereich anschauen. Für kleinere Zahlen (< 1E-45) musst du double verwenden.

Beni hat gesagt.:
rosch7 hat gesagt.:
Jetzt funktionnert der Editor prima, danke für alles, aber ich habe keine Ahnung wie kann ich combobox implementieren (alphabisch sortieren: JComboBox ecucb + JComboBox fehlercb).
wie kann ich mein eigenes ComboBoxModel schreiben, oder wo genau und wie soll ichden Code unten implementieren:
Code:
JComboBox box = ...
ComboBoxModel model = box.getModel();
Object selected = model.getSelectedItem();

Object[] elements = ... // mit den Elementen von model füllen

java.util.Arrays.sort( elemnts ); // Sortieren lassen

DefaultComboBoxModel newModel = new DefaultComboBoxModel( elements );
box.setModel( newModel );
newModel.setSelectedItem( selected );

Was man alles für ein ComboBoxModel implementieren muss, steht hier. Praktisch machst du eine neue Klasse (implements ComboBoxModel), und fügst solange fehlende Methoden hinzu, bis der Compiler zufrieden ist :wink:

Den Code da oben: irgendwann nachdem du die Elemente in die Combobox gegeben hast. Am einfachsten schreibst du das in eine eigene Methode, und übergibst die Comboboxen (zweimal dasselbe schreiben, nur weil da zwei Comboboxen sind, ist nicht so dolle :wink: )
 

rosch7

Mitglied
Sorry, ich bin ganz neue hier. Ich mache es zukunftig besser. Entschuldigung noch einmal an alle Benutzer
 

rosch7

Mitglied
Speichern der Fehlerklassentabelle:
Die vorher veränderten Eigenschaften der Tabelle sollen erhalten bleiben, wenn man auf dieses System zurückgeht, so muss der Save-Button oben angeklickt werden. Er sorgt dafür, dass die Tabelle so wie sie aufgebaut wurde, in der XML-Datei gespeichert wird. Z.B als Speicher platz C:\Editor.
Ich weiss nicht wir kann ich " Serialisieren in XML-Dateien " benutzen um meine veränderten Tabellen zu speichern
 
B

Beni

Gast
Naja, schreiben kannst du mit Streams oder Writern, der XML-Syntax ist ja bekannt...

XML lesen kann man mit dem SAXParser, oder einem DocumentBuilder (beide in javax.xml.parsers).

Da findet man aber genügend Beispiele wenn man bei google sucht.
 
B

Beni

Gast
rosch7 hat gesagt.:
Sorry, ich bin ganz neue hier. Ich mache es zukunftig besser. Entschuldigung noch einmal an alle Benutzer
Lies mal das hier durch, danach wirst du besser verstehen wieso hier was, wie, warum und wann abläuft :wink:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Datentypen Kann ich bei double Komma statt Punkt eingeben? Java Basics - Anfänger-Themen 14
R Double: auf einmal Komma statt Punkt Java Basics - Anfänger-Themen 4
M was wenn der benutzer ein double statt int eingibt ? Java Basics - Anfänger-Themen 3
W Double or Float zusammenrechnen Java Basics - Anfänger-Themen 15
I Review von euch erwünscht, double Rechnung falsch Java Basics - Anfänger-Themen 34
X wie bekomme ich durch Eingabeaufforderung definierte double in einen Befehl, welcher 3 erwartete double braucht? Java Basics - Anfänger-Themen 3
Avalon String in Double bzw. Währung konvertieren Java Basics - Anfänger-Themen 6
MoxMorris Integer.MAX_VALUE und Double.MAX_VALUE Unterschied Java Basics - Anfänger-Themen 3
krgewb Double mit zwei Nachkommastellen Java Basics - Anfänger-Themen 2
B Produkt eines double - streams Java Basics - Anfänger-Themen 3
Lion.King Fehler in double und int Java Basics - Anfänger-Themen 7
F java: incompatible types: possible lossy conversion from double to int Java Basics - Anfänger-Themen 1
J Double Variable und Addition Java Basics - Anfänger-Themen 2
F Double Ausgabe nicht wissenschaftlich Java Basics - Anfänger-Themen 16
S Fragen zu Ausgabe double und float Java Basics - Anfänger-Themen 3
Kotelettklopfer Variablen Double zwingen Ganzzahlen mit 2 Nachkommastellen auszugeben Java Basics - Anfänger-Themen 10
A possible lossy conversion from double to int Java Basics - Anfänger-Themen 5
I Output BigDecimal anstatt double / Problem beim Rechnen Java Basics - Anfänger-Themen 16
L ArrayList<String> --> double[] array Java Basics - Anfänger-Themen 18
FelixN Array mit verschiedene Datentypen als Rückgabewert? (Long und Double) Java Basics - Anfänger-Themen 3
J Transformation zweier Integer in ein Double Java Basics - Anfänger-Themen 26
N The method setSaldo(double) in the type Konto is not applicable for the arguments (int, int) Java Basics - Anfänger-Themen 2
C Konvertierung des int typs in den double typ für die Ausgabe mit Nachkommastellen Java Basics - Anfänger-Themen 4
V Erste Schritte Die Nuller bei double NICHT abschneiden Java Basics - Anfänger-Themen 4
Y Datentypen Double Division ungenau Java Basics - Anfänger-Themen 45
L Datentypen Rechnen und abrunden mit double Java Basics - Anfänger-Themen 7
M Writer für unterschiedliche Obj/inbt/double erstellen? Java Basics - Anfänger-Themen 1
F Character umwandeln als Double Werte Java Basics - Anfänger-Themen 8
M Double Wert nach n abschneiden ohne zu runden Java Basics - Anfänger-Themen 1
D Methode mit Übergabe double und Rückgabe String Java Basics - Anfänger-Themen 2
P Hilfe bei Double Java Basics - Anfänger-Themen 1
B Rückgabe von zwei Werten: String und double Java Basics - Anfänger-Themen 14
B HQL / Hibernate, GroupBy und Ausgabe als Double Java Basics - Anfänger-Themen 1
M Konvertierung String -> double Java Basics - Anfänger-Themen 8
A Double Scan eingrenzen Java Basics - Anfänger-Themen 2
O Erste Schritte Potenzmethode per double Java Basics - Anfänger-Themen 11
A Random Double mit Math.round() runden? Java Basics - Anfänger-Themen 1
H Double oder nicht? Java Basics - Anfänger-Themen 7
J int array als double array ausgeben Java Basics - Anfänger-Themen 9
M Int und Double in Array speichern Java Basics - Anfänger-Themen 1
J String, Int und double Array sortieren Java Basics - Anfänger-Themen 16
B Hashing (verkettet/double) Java Basics - Anfänger-Themen 0
L Konvertieren von String zu double?! Java Basics - Anfänger-Themen 6
V Operatoren Warum kommt bei double bei den Nachkommastellen irgendwann eine 2?! (1.20000000000002) Java Basics - Anfänger-Themen 5
geekex Double zu String umwandeln in einer Methode Java Basics - Anfänger-Themen 28
E Bruch erstellen - Von Int zu Double Ergebnis Java Basics - Anfänger-Themen 24
G Probleme beim casten von double zu int Java Basics - Anfänger-Themen 3
I Double.ParseDouble 2 Textfelder Java Basics - Anfänger-Themen 1
M JComboBox feste double Werte zu ordnen Java Basics - Anfänger-Themen 8
E Von Double zu Long umwandeln Java Basics - Anfänger-Themen 9
L Bei falscher Eingabe soll NaN zurückgegeben werden, Rückgabetyp jedoch double Java Basics - Anfänger-Themen 3
V Variablen Double später deklarieren Java Basics - Anfänger-Themen 7
V double = 1.34823e-300 Java Basics - Anfänger-Themen 5
W double*double error Java Basics - Anfänger-Themen 4
kilopack15 Mehr Nachkommastellen mit double Java Basics - Anfänger-Themen 14
T Input/Output Double und String als Eingabe einlesen Java Basics - Anfänger-Themen 9
J [Rundungsfehler bei Double] Grundkurs Java: Checke Lösungsweg nicht Java Basics - Anfänger-Themen 1
W In einer Function<Double, Double> undefinierte Rechenoperationen abfangen? Java Basics - Anfänger-Themen 3
T set Metode für Double Java Basics - Anfänger-Themen 6
Hijo2006 String to Double Java Basics - Anfänger-Themen 4
K Double Wert runden und in Int umwandeln Java Basics - Anfänger-Themen 7
A Kommafehler beim double einleseen korrigieren Java Basics - Anfänger-Themen 2
K Operatoren The Operator * is undefined for the argument type(s) double, String Java Basics - Anfänger-Themen 4
das_leon String zu double konventieren Java Basics - Anfänger-Themen 1
K Genauer als Double? Java Basics - Anfänger-Themen 4
T Double.parseDouble(args[0]) Java Basics - Anfänger-Themen 13
A Java Ungenauigkeit double Java Basics - Anfänger-Themen 6
B Methoden The method mirror(double[]) in the type Convolution is not applicable for the arguments (double) Java Basics - Anfänger-Themen 8
C Typumwandlung von int<-->double Java Basics - Anfänger-Themen 6
M Double Wert auf 2 Kommastellen runden Java Basics - Anfänger-Themen 2
S Regelabfragen aus Double-Array Java Basics - Anfänger-Themen 2
A Erste Schritte Double Wert aus String zu int Java Basics - Anfänger-Themen 2
P Rückgabe erflogt nicht als Double Java Basics - Anfänger-Themen 2
K Erste Schritte switch - Warum sind long/float/double/... nicht erlaubt? Java Basics - Anfänger-Themen 5
P scanner ein Double einlesen Java Basics - Anfänger-Themen 10
T Java double berechnung fehler Java Basics - Anfänger-Themen 2
S double[x] , double[y] zu Point[] points kopieren? Java Basics - Anfänger-Themen 15
G double in float umwandeln Java Basics - Anfänger-Themen 2
F double[] an andere Methode übergeben Java Basics - Anfänger-Themen 1
B Datentypen Test float und double speichern Zahlen nur ungefähr Java Basics - Anfänger-Themen 4
S Datentypen double - kommastellen abschneiden Java Basics - Anfänger-Themen 6
M int double int double Graph Java Basics - Anfänger-Themen 3
K ArrayList<Double> --> double[] array Java Basics - Anfänger-Themen 5
Z Double in komma und Punkt akzeptieren -> Robusteeingabe Java Basics - Anfänger-Themen 7
S Double und Gleitkommazahlen mit JUnit testen Java Basics - Anfänger-Themen 7
B Datentypen Multiplzieren mit double wird ungenau Java Basics - Anfänger-Themen 4
K Von einem Double wert nur die Zahl vor dem Komma verwenden Java Basics - Anfänger-Themen 9
F Double neu formatieren mit NumberFormat Java Basics - Anfänger-Themen 2
M Double-Ausgabe in JTextField fehlerhaft Java Basics - Anfänger-Themen 2
T Problem mit double-Formatierung Java Basics - Anfänger-Themen 3
M Double Zahl in Grad Zahl Java Basics - Anfänger-Themen 7
M Datentypen Ergebniss- Double to String- wird nicht angezeigt Java Basics - Anfänger-Themen 13
S Double mithilfe eines Scanners so einlesen, dass ich damit rechnen kann Java Basics - Anfänger-Themen 4
M Die Double-Variable rundet? Java Basics - Anfänger-Themen 1
llabusch Methoden Methoden überlagern - entweder int || double Java Basics - Anfänger-Themen 10
S Double, int, Berechnung Java Basics - Anfänger-Themen 3
K Datentypen Wertebereich float/double - Warum nicht hoch -1 Java Basics - Anfänger-Themen 6
A Double[] Array zahlen per Argument übergeben Java Basics - Anfänger-Themen 5
B Erste Schritte Addition von double in switch-Anweisung Java Basics - Anfänger-Themen 2
D Unterschied zwischen double und Double Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben