JTable - Auf spezielle Eingabe nicht reagieren.

shidan

Mitglied
Vielleicht ein wenig unverständlich der Titel.

Hallo erstmal,
Ich habe ein JTable sowie eine JMenuBar mit einem Item was auf "Entf" die Zeile löschen soll.
Das klappt so bis jetzt wenn ich das KeyEvent verändere immer gut nur nicht mit "Entf" da sich bei diesem Knopfdruck sofort die Tabelle aktiviert und auf eine Eingabe wartet, kann ich das irgendwie entfernen ?
 

shidan

Mitglied
Uff, meine Table ist so ein durcheinander aber egal.

Java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.net.URL;

import javax.swing.DefaultCellEditor;
import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextPane;
import javax.swing.KeyStroke;
import javax.swing.LayoutStyle;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
import javax.swing.table.TableModel;


/**
* This code was edited or generated using CloudGarden's Jigloo
* SWT/Swing GUI Builder, which is free for non-commercial
* use. If Jigloo is being used commercially (ie, by a corporation,
* company or business for any purpose whatever) then you
* should purchase a license for each developer using Jigloo.
* Please visit [url=http://www.cloudgarden.com]Cloud Garden (Java Resources)[/url] for details.
* Use of Jigloo implies acceptance of these licensing terms.
* A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED FOR
* THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED
* LEGALLY FOR ANY CORPORATE OR COMMERCIAL PURPOSE.
*/
/**
 * @author Daniel
 * @version 1.2
 * GUI by Jigloo GPL Software.
 * Neues Frame um ein extra Fenster aufzurufen welches eine neue Reihe in der Tabelle erzeugt
 * und/oder neu Personen / Projekte hinzufügt.
 */

public class TablePanel extends JFrame implements ActionListener,TableModelListener,MouseListener{
	/**
	 * Einfache GUI für das Anzeigen der Daten aus der "table.txt"
	 * Beinhaldet:	JTable / DefaultTableModel
	 * 				JMenuBar / JMenu / MenuItems
	 * 				JScrollPane  				
	 */
	static TablePanel g2;
	private Global global = new Global();
	private Eigenschaften c_props = new Eigenschaften();
	private static final long serialVersionUID = 1L;
	private InitData c_initData;
	private TableMethoden c_TableM;
	private RefactorDataPanel c_NewLine;
	private Options c_options;
	private JScrollPane jScrollPane;
	private JTable jTable;
	private DefaultTableModel dtm;
	private JMenuBar jMenuBar;
	private JMenu Menu;
	private JMenu jMenu1;
	private JMenuItem jMenuItem_deleteRow;
	private JMenuItem jMenuItem_save;
	private JMenuItem jMenuItem_PersonAndProjekt;
	private JMenuItem jMenuItem_exit;
	private JLabel jLabelstatus;
	private JButton jButton2;
	private JButton jButton1;
	private JPanel tool;
	private JMenuItem jMenuItem_addRow;
	private JMenuItem jMenuItem_Refresh;
	private JMenuItem jMenuItem_selectAll;
	private JMenuItem jMenuItem_options;
	private JComboBox comboBox_names;
	private JComboBox comboBox_projekts;
	private JTextPane jErroPane;

	private int nZwischensicherung,selectedRow=-1,selectedCol=-1,tablewidth;
	private String[] namen,projekt,week;
	private String value;


	{
		//Set Look & Feel		
		try {
			javax.swing.UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
		} catch(Exception e) {
			e.printStackTrace();
		}
	}

	/** Konstruktor für das Table
	 * Initalisiert die Daten um sie in der Tabelle wiederzugeben und startet die GUI.
	 * @param table
	 * @param namen
	 * @param projekt
	 * @param week
	 */
	public TablePanel(String[] table,String[] namen,String[] projekt,String[] week) {
		super();
		assignIcon();
		if(table != null && namen != null && projekt != null && week !=  null){
			this.namen = namen;
			this.projekt = projekt;
			this.week = week;	
			c_initData = InitData.fl;
			c_NewLine = new RefactorDataPanel();	
			c_options = new Options(this);
				SwingUtilities.invokeLater(new Runnable() {				
				public void run() {	
					g2 = TablePanel.this;
					if(global.getPreferedDimenson() != null){
						System.out.println(global.getPreferedDimenson());
						setSize(global.getPreferedDimenson());
					}
					setLocation(global.getPositionX(),global.getPositionY());	
					setVisible(true);						
				}
			});
			initGUI(true);	
			
			nZwischensicherung = 1000; // Wartezeit für die Zwsichensicherung in Millisekunden ( 5 Sekunden )
			Thread thread1 = new Thread(new RunnableThread("TableChangedThread"));	// Neuer Thread f�r die Zwischensicherung.	
			thread1.start();	
		}else{
			initGUI(false);		
		}
	}
	
	/** GUI wird initalisiert.	
	 * @param error Wenn etwas schief läuft.
	 */
	
	/**Application Icon wird verändert.
	 * 
	 */
	private void assignIcon() {
		URL iconURI;
		Class<? extends TablePanel> res = getClass();
		
		iconURI = res.getResource("/daten/table.gif");	
		String path  = iconURI.getFile().replaceAll("%20", " "); 
		Toolkit kit = Toolkit.getDefaultToolkit();
		Image img = kit.createImage(path);
		setIconImage(img);
	}
	
	private void initGUI(boolean error) {
		try {				
			
			BorderLayout thisLayout = new BorderLayout();
			getContentPane().setLayout(thisLayout);
			setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);			
			this.setJMenuBar(jMenuBar);
			this.setVisible(false);
			this.setTitle("Ressourcen Planer");
			
			if(error){
				{
					jScrollPane = new JScrollPane();
					getContentPane().add(jScrollPane, BorderLayout.CENTER);
					jScrollPane.setBounds(0, 0, 137, 100);						
					jScrollPane.setPreferredSize(new java.awt.Dimension(797, 240));
					{					
					
						// Tabelle wird initalsiert und mit Daten besetzt.
						tableSetData();						
						
						jScrollPane.setViewportView(jTable);					
						jTable.setFillsViewportHeight(true);					
						jTable.getTableHeader().setOpaque(true);
						jTable.getTableHeader().setResizingAllowed(true);
						this.setTablewidth(0);
						// Größe wird speziell festgelegt weil sich die Tabelle permanent ändern kann.
						int size = c_initData.getTable().length * jTable.getRowHeight();
						if(global.getnZeigewochen() < global.getKalenderwochen()){
							TableColumn column = null;		
							column = jTable.getColumnModel().getColumn(0);
							setTablewidth(global.getnZeigewochen()*column.getPreferredWidth());;
						}else{
							setTablewidth(jTable.getWidth());
						}					
						
						jTable.setPreferredSize(new Dimension(jTable.getWidth(),size+jTable.getRowHeight()));					
						jTable.setPreferredScrollableViewportSize(jTable.getPreferredSize());
						System.out.println(jTable.getPreferredScrollableViewportSize());
						jTable.getTableHeader().setReorderingAllowed(false);					
					}
				}
				{
					tool = new JPanel();
					GroupLayout toolLayout = new GroupLayout((JComponent)tool);
					tool.setLayout(toolLayout);
					getContentPane().add(tool, BorderLayout.SOUTH);
					tool.setMaximumSize(new java.awt.Dimension(800, 20));
					tool.setRequestFocusEnabled(false);
					tool.setPreferredSize(new java.awt.Dimension(797, 21));
					{
						jButton1 = new JButton();
						jButton1.setText("L\u00F6schen");
						jButton1.setActionCommand("4");
						jButton1.addActionListener(this);
					}
					{
						jButton2 = new JButton();
						jButton2.setText("Neue Reihe");
						jButton2.setSize(87, 14);
						jButton2.setActionCommand("3");
						jButton2.addActionListener(this);
					}
					{
						jLabelstatus = new JLabel();
						jLabelstatus.setText("Status:");
					}
						toolLayout.setHorizontalGroup(toolLayout.createSequentialGroup()
						.addComponent(jLabelstatus, GroupLayout.PREFERRED_SIZE, 369, GroupLayout.PREFERRED_SIZE)
						.addGap(254)
						.addComponent(jButton2, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE)
						.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
						.addComponent(jButton1, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE)
						.addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE));
						toolLayout.setVerticalGroup(toolLayout.createParallelGroup()
						.addComponent(jLabelstatus, GroupLayout.Alignment.LEADING, 0, 21, Short.MAX_VALUE)
						.addGroup(toolLayout.createSequentialGroup()
						    .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, 0, Short.MAX_VALUE)
						    .addGroup(toolLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
						        .addComponent(jButton2, GroupLayout.Alignment.BASELINE, GroupLayout.PREFERRED_SIZE, 16, GroupLayout.PREFERRED_SIZE)
						        .addComponent(jButton1, GroupLayout.Alignment.BASELINE, GroupLayout.PREFERRED_SIZE, 16, GroupLayout.PREFERRED_SIZE))));
				}
			{
				jMenuBar = new JMenuBar();
				setJMenuBar(jMenuBar);
				{
					Menu = new JMenu();
					jMenuBar.add(Menu);
					Menu.setText("Menu");					
					{
						jMenuItem_PersonAndProjekt = new JMenuItem();
						Menu.add(jMenuItem_PersonAndProjekt);
						jMenuItem_PersonAndProjekt.setText("Personen & Projekt Bearbeitung");
						jMenuItem_PersonAndProjekt.setEnabled(true);
						jMenuItem_PersonAndProjekt.setActionCommand("1");						
						jMenuItem_PersonAndProjekt.addActionListener(this);						

					}
					{
						jMenuItem_save = new JMenuItem("Speichern");
						jMenuItem_save.setAccelerator(KeyStroke.getKeyStroke(
						        KeyEvent.VK_S, ActionEvent.CTRL_MASK));
						Menu.add(jMenuItem_save);					
						jMenuItem_save.setActionCommand("2");
						jMenuItem_save.addActionListener(this); 
					}
					{
						jMenuItem_addRow = new JMenuItem("Neue Reihe");
						jMenuItem_addRow.setAccelerator(KeyStroke.getKeyStroke(
						        KeyEvent.VK_ADD, ActionEvent.CTRL_MASK));
						Menu.add(jMenuItem_addRow);					
						jMenuItem_addRow.setActionCommand("3");
						jMenuItem_addRow.addActionListener(this);
					}
					{
						jMenuItem_exit = new JMenuItem("Beenden");
						jMenuItem_exit.setAccelerator(KeyStroke.getKeyStroke("ESCAPE"));
						Menu.add(jMenuItem_exit);
						jMenuItem_exit.setActionCommand("8");
						jMenuItem_exit.addActionListener(this);					
					}

				}
				{
					jMenu1 = new JMenu();
					jMenuBar.add(jMenu1);
					jMenu1.setText("Bearbeiten");
					{
						jMenuItem_deleteRow = new JMenuItem();
						jMenu1.add(jMenuItem_deleteRow);
						jMenuItem_deleteRow.setText("Markierte Reihe l\u00F6schen");
						jMenuItem_deleteRow.setAccelerator(KeyStroke.getKeyStroke("DELETE"));
						jMenuItem_deleteRow.setActionCommand("4");
						jMenuItem_deleteRow.addActionListener(this);						
					}
					{
						jMenuItem_Refresh = new JMenuItem();
						jMenu1.add(jMenuItem_addRow);
						jMenuItem_Refresh.setText("Refresh");
						jMenu1.add(jMenuItem_Refresh);
						jMenuItem_Refresh.setAccelerator(KeyStroke.getKeyStroke("F5"));
						jMenuItem_Refresh.setActionCommand("5");
						jMenuItem_Refresh.addActionListener(this);
						
					}
					{
						jMenuItem_selectAll = new JMenuItem("Alles Markiern");
						jMenu1.add(jMenuItem_selectAll);
						jMenuItem_selectAll.setAccelerator(KeyStroke.getKeyStroke(
						        KeyEvent.VK_A, ActionEvent.CTRL_MASK));	
						jMenuItem_selectAll.setActionCommand("6");
						jMenuItem_selectAll.addActionListener(this);
					}
					{
						jMenuItem_options = new JMenuItem("Optionen");
						jMenu1.add(jMenuItem_options);
						jMenuItem_options.setActionCommand("7");
						jMenuItem_options.addActionListener(this);
					}
				}
			}
			// Dies wird aufgerufen falls ein Fehler ensteht wie z.B eine Datei ist gelöscht oder null.
		}else{				
				JFrame frame = new JFrame("FrameDemo");

				frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
				JTextPane emptyLabel = new JTextPane();
		        emptyLabel.setForeground(Color.red);
		        emptyLabel.setPreferredSize(new Dimension(175, 100));
		      
		        this.setVisible(true);
		        this.setPreferredSize(new java.awt.Dimension(800, 300));
		        this.setMinimumSize(new java.awt.Dimension(500, 250));
		        {
		        	jErroPane = new JTextPane();
		        	jErroPane.setText("jTextPane1");
		        	jErroPane.setEditable(false);
		        	jErroPane.setEnabled(false);
		        	jErroPane.setForeground(Color.RED);
		        	jErroPane.setText("Ups, da ist etwas schiefgelaufen. \nBitte prüfen sie nocheinmal alle Datein und starten sie neu!");
		        	
		        }		        	
			}
		
					
			pack();
			c_TableM = new TableMethoden(jTable,jLabelstatus,getDtm());			
			c_initData = null;
			this.setSize(805, 317);
		} catch (NullPointerException e) {
			System.err.println("GUI : 1");
			e.printStackTrace();	
		} catch(Exception e){
			e.printStackTrace();			
		}
	}


	/**
	 * Lässt die Tabelle verschwinden.
	 */
	public void refresh() {
		c_TableM.save();
		dispose();
	}

	/**
	 * Setzt das DefaultTableModel
	 * @param dtm
	 */
	public void setDtm(DefaultTableModel dtm) {
		this.dtm = dtm;
	}
	
	
    class GroupingTable extends JTable {
        /**
		 * Das JTable wird überschrieben um eine Gruppierung zu ermöglichen.
		 */
		private static final long serialVersionUID = 1L;
		private int keyColumn;
        private Color[] colorModel;
        private int[] colorIndex;   //"Model" zur Speichern der Zeilenfarbe
        private Color lightergray = new Color(215, 215, 215);
        
        public GroupingTable(TableModel model, int column) {
            super(model);
            this.keyColumn = column;
            colorModel = new Color[] {this.getBackground(), lightergray};
            determineColor();
        }
        
        //tableChanged Ueberschrieben, damit das "Farbenmodel" aktualisiert wird
        public void tableChanged(TableModelEvent evt) {
            if (evt.getColumn()==keyColumn)
                determineColor();
            super.tableChanged(evt);
        }
        
        //Methode zum Ermitteln der Zeilenfarbe
        private void determineColor() {
            colorIndex = new int[this.getRowCount()];
            if (colorIndex.length<=0)
                return;
            int colorCount=0;
            colorIndex[0] = colorCount;
            for (int row=1; row<this.getRowCount(); row++) {
            	
                if(this.getValueAt(row, this.convertColumnIndexToView(keyColumn)) != null && this.getValueAt(row, this.convertColumnIndexToView(keyColumn))
                        .equals(this.getValueAt(row-1, this.convertColumnIndexToView(keyColumn))))
                    colorIndex[row] = colorCount & 1;
                else
                    colorIndex[row] = ++colorCount & 1;
            }
        }
        
        //Ueberschrieben, um die Zeilenfarbe zu setzen.
        public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
            Component c = (Component) super.prepareRenderer(renderer, row, column);
            for (int i=0; i<this.getSelectedRows().length; i++) {
                if (this.getSelectedRows()[i]==row)
                    return c;
            }
            try{
            	c.setBackground(colorModel[colorIndex[row]]);
            }catch(ArrayIndexOutOfBoundsException ex){
            	
            }
            return c;
        }
    }
	
    /**
     * Hier wird die Tabelle mit Daten gefüllt , initalisiert und sowie TableModel festgelegt.
     */
	
	private void tableSetData() {		
		String[][] data 		= new String[c_initData.get2DTable().size()][global.getKalenderwochen()];		
		
	
		String[] header = new String[global.getKalenderwochen()];
		header[0] = "Namen";
		header[1] = "Projekte";				
		
		for(int i = 2; i < header.length; i++){
			header[i] = week[i-2];
		}
		
		int first = c_initData.get2DTable().size();		
		for(int l = 0; l < first; l++){		
			int second = c_initData.get2DTable().get(l).size()-1;
			for(int i = 0; i < second; i++){
				data[l][i] = c_initData.get2DTable().get(l).get(i);					
			}			
		}	
		
		 /*Eigenes DefaultTableModel um nur Zahlen zwischen 0- 100 auf der Tabelle 
		  * nach Zeile 2 zu zulassen.
		 */	
		setDtm(new DefaultTableModel(data,header){			
	
				private static final long serialVersionUID = 1L;
	
	
				@Override
				    public void setValueAt(Object aValue, int row, int col)
				    {
				        // Abbruch wenn der Wert kein Integer ist.	
				        if (aValue instanceof Integer)
				        {
				        	//Abbruch wenn der Wert nicht zwischen 0 - 100 liegt.
				          int value = ((Integer)aValue).intValue();		
				        	  if(value < 0 || value > 100){
				        		  return;			        	  
				          }
				        }
				        // Setze den Wert.
				        super.setValueAt(aValue, row, col);
				    }
	
				 
				    @Override
				    public Class<?> getColumnClass(int col)
				    {
				        if (col >=2)
				            return Integer.class;
				        else{
				        	return String.class;
				        }
				    }			
			});
		
		  jTable = new GroupingTable(dtm, 0);

		jTable.setLayout(null);

				
		jTable.setAutoCreateRowSorter(true);
		
		//ComboBoxen werden auf das JTable gelegt.
		TableColumn tColumnNames = jTable.getColumnModel().getColumn(0);
		comboBox_names = new JComboBox();
		TableColumn tColumnProjekts = jTable.getColumnModel().getColumn(1);
		comboBox_projekts = new JComboBox();
		
		
		jTable.setPreferredSize(new java.awt.Dimension(814, 261));
		jTable.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
		jTable.getTableHeader().setBounds(0, 0, 793, 0);
		jTable.addMouseListener(this);
		
		//ComboxBox für Namen und Projekte werden mit den Namen und Projekten gefüllt.
		comboBox_names.addItem("");
		comboBox_projekts.addItem("");
		for(int i = 0; i < namen.length; i++){
			comboBox_names.addItem(namen[i]);
		}

		for(int i = 0; i < projekt.length; i++){
			comboBox_projekts.addItem(projekt[i]);
		}
		
		//CellEditor f�r die ComboBoxen.
		tColumnNames.setCellEditor(new DefaultCellEditor(comboBox_names));
		tColumnProjekts.setCellEditor(new DefaultCellEditor(comboBox_projekts));

		//ModelListener für die Tabelle um %te an Zahlen zu ergänzen
		getDtm().addTableModelListener(this); 		
		
		
		//c_TableM.getNotFull();

	}

	

	/**Erzeugen einer Thread Klasse um Threads zu starten für z.B Zwischensicherung.
	 * 

	 */
	class RunnableThread implements Runnable {

		Thread runner;
		public RunnableThread() {
		}
		public RunnableThread(String threadName) {
			runner = new Thread(this, threadName); // (1) Create a new thread.
			runner.start(); // (2) Start the thread.
		}
		public void run() {
			try {
				boolean endless = true;
				while(endless){
					Thread.sleep(nZwischensicherung);				
					c_TableM.save();					
					c_props.dimensionCheck(getSize());
					c_props.positionChanged(g2.getX(), g2.getY());
				}
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		
		}
	}
		/**ActionListener,
		 * Switch durch die jeweiligen ActionCommands. 
		 * Commandos sind Integer und werden geparsed !!!
		 * @param ActionEvent.
		 */
		public void actionPerformed(ActionEvent e) {
			String status = "Status: ";
			jLabelstatus.setText("");			
			c_initData = InitData.fl;			
			try{
				c_TableM.save();
				int actioncommand = Integer.parseInt(e.getActionCommand());
				
				switch(actioncommand){
				case 1:								//Neue Person/Projekt hinzufuegen
					c_NewLine.main();
					break;
					
				case 2:					
					c_TableM.save();				//SAVE
					jLabelstatus.setText(status+"Gespeichert.");
					break;
					
				case 3:					
					if(c_TableM.checkEmpty()){		
						jTable = c_TableM.addEmpty();
						jLabelstatus.setForeground(Color.BLACK);
						jLabelstatus.setText(status+"Reihe hinzugefügt.");
					}
					break;
				case 4:									//Delete
					jTable.getEditorComponent();
					jTable.setEnabled(false);
					c_TableM.delete();	
					jTable.setEnabled(true);
					jLabelstatus.setForeground(Color.BLACK);
					jLabelstatus.setText(status+"Löschen erfolgreich.");
					break;
				case 5:									//Refresh
					c_initData.refresh();
					break;
				case 6:									//Alles markieren
					jTable.selectAll();
					break;
				case 7:
					c_options.main();					// Optionen
				
				case 8:									//Beenden
					System.exit(1);		

				default:
					break;		
					
			}				
				
			}catch(NumberFormatException ex){
				System.err.println("Fehler beim Parsen !");
				ex.printStackTrace();
			}					
		}


		
		/**
		 * 
		 * @return DefaultTableModel.
		 */
		public DefaultTableModel getDtm() {
			return dtm;
		}
		
		/**
		 * TableListener um % an die Werte in der Tabelle anzuhängen.
		 */

		public void tableChanged(TableModelEvent e) {			 
			 int row = e.getFirstRow();
		     int column = e.getColumn();
		     TableModel model = (TableModel)e.getSource();
		     //String columnName = model.getColumnName(column);	 	
	    	 if(column >= 2){
	    		 Object data = model.getValueAt(row, column);	    		 
	    		 if(data != null){
	    			 String daten = data.toString().trim();
	    			 if(daten.contains("%")){
	    				 daten.replaceAll("%", "");	    			
	    			 }else{
	    				 if(!daten.equals("")){
	    					 try{
	    						 int prozent = Integer.parseInt(daten);
	    						 model.setValueAt(prozent+"%", row, column);
	    					 }catch(ClassCastException ex){
	    						 model.setValueAt(daten, row, column);
	    					 }		    			 
	    				 }
	    			 }
	    		 }
	    		 c_TableM.save();
	    	 }	
		}

		@Override
		public void mouseClicked(MouseEvent e) {
			try{
				if(selectedCol != -1 && selectedRow != -1){
					if(selectedRow != jTable.rowAtPoint(e.getPoint()) || selectedCol != jTable.columnAtPoint(e.getPoint())){
						if(jTable.getValueAt(selectedRow, selectedCol) == null || jTable.getValueAt(selectedRow, selectedCol).toString().trim().equals("")){
							if(!value.equals("")){
								jTable.setValueAt(value, selectedRow, selectedCol);							
							}
						}
					}
				}
			}catch(IndexOutOfBoundsException ex){
				selectedCol = -1;
				selectedRow = -1;
				value = "";
				jTable.clearSelection();
			}			
		}

		@Override
		public void mouseEntered(MouseEvent arg0) {
		
			
		}

		@Override
		public void mouseExited(MouseEvent arg0) {
		
			
		}

		@Override
		public void mousePressed(MouseEvent e) {

			
		}

		@Override
		public void mouseReleased(MouseEvent e) {	
			try{
			if(selectedCol != -1 && selectedRow != -1){
				if(selectedRow != jTable.rowAtPoint(e.getPoint()) || selectedCol != jTable.columnAtPoint(e.getPoint())){
					if(jTable.getValueAt(selectedRow, selectedCol) == null || jTable.getValueAt(selectedRow, selectedCol).toString().trim().equals("")){
						if(!value.equals("")){
							jTable.setValueAt(value, selectedRow, selectedCol);							
						}
					}
				}
			}			
				selectedRow=jTable.rowAtPoint(e.getPoint());
				selectedCol= jTable.columnAtPoint(e.getPoint());
				if(jTable.getValueAt(selectedRow,selectedCol) != null){
					value = jTable.getValueAt(selectedRow,selectedCol).toString();
				}else{
					value = "";
				}
				jTable.setValueAt("",selectedRow,selectedCol);					
			}catch(IndexOutOfBoundsException ex){			
				selectedCol = -1;
				selectedRow = -1;
				value = "";
				jTable.clearSelection();
			}
		}

		public void setTablewidth(int tablewidth) {
			this.tablewidth = tablewidth;
		}

		public int getTablewidth() {
			return tablewidth;
		}

}
 

Dit_

Bekanntes Mitglied
hmmm :eek: einbisschen zu viel :)

Also

Habe ich dich richtig verstanden dein Programm reagiert beim Betätigen des "Entf" Taste wie "Einfg"?

versuche im ActionListener auszugeben von wem das Ereignis kommt.

Irgendwie kommtst du mit ActionCommand durcheinander. Vielleicht wäre es besser Actions zu verwenden. :bahnhof:

was mach die Methode delete() ?
 

shidan

Mitglied
Habe ich dich richtig verstanden dein Programm reagiert beim Betätigen des "Entf" Taste wie "Einfg"
Jap.

versuche im ActionListener auszugeben von wem das Ereignis kommt.
Moment ich teste es und bearbeite den Post dann.

Irgendwie kommtst du mit ActionCommand durcheinander. Vielleicht wäre es besser Actions zu verwenden.
Ich komme damit nicht durcheinander aber andere bestimmt. Später mach ich das denke ich eh alles leserlicher das mit den Commands war jetzt nur damit ich schnell den Zugriff hatte.
Wie meinst du das denn das ich Actions verwenden soll?


was mach die Methode delete() ?
Löscht eine bis mehre Selektierte Zeilen aus der Tabelle.

Java:
/** Löscht einen Eintrag aus der Tabelle und aktualisiert sie dann.
	 * 
	 */
	
	public void delete() {			
		try{			
			tabellez.setFocusable(false);
			int[] remRows = tabellez.getSelectedRows();					
				for (int i = remRows.length - 1; i > -1; i--) {
						int rowInModel = (tabellez.convertRowIndexToModel(remRows[i]));
				    	dtm.removeRow(rowInModel);
		
				}
				tabellez.setFocusable(true);		
				refresh();
			//	label.setText("Status:");
			//	label.setText(label.getText()+"Erfolgreich gelöscht!");
		}catch(IndexOutOfBoundsException ex){	
				
		}catch(IllegalArgumentException ex){
			dtm.addRow(new String[]{});								
			c_initData.refresh();
			labelz.setText("Status:");
			labelz.setText(labelz.getText()+"Keine Reihe zum löschen vorhanden!");			
		}
	}
 

Ebenius

Top Contributor
Ich hoffe ich hab Dein Problem richtig verstanden.

Hier mal ein ausführbares Beispiel wie ich das machen würde. Zeile selektieren, ENTF drücken, Zeile wird gelöscht. EINFG drücken, Zeile wird eingefügt. Nach jeder Aktion musst Du wieder neu selektieren, die Feinheiten hab ich einfach ausgelassen:
Java:
/* (@)JTableKeyMapTest.java */

/* Copyright 2011 Sebastian Haufe

 * Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       [url]http://www.apache.org/licenses/LICENSE-2.0[/url]

 * Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License. */

package com.ebenius;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;

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

/**
 * Tests key map on {@link JTable}.
 * 
 * @author Sebastian Haufe
 */
public class JTableKeyMapTest {

  /** Creates the GUI. Call on EDT, only! */
  static void createAndShowGui() {
    final DefaultTableModel tableModel = new DefaultTableModel(0, 2);
    for (int i = 0; i < 5; i++) {
      tableModel.addRow(new Object[] { "Orig Row", Integer.valueOf(i) });
    }
    final JTable table = new JTable(tableModel);

    final InputMap im = table.getInputMap(JComponent.WHEN_FOCUSED);
    im.put(KeyStroke.getKeyStroke(KeyEvent.VK_INSERT, 0), "insert row");
    im.put(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0), "delete row");

    final ActionMap am = table.getActionMap();
    am.put("insert row", new AbstractAction() {

      private static final long serialVersionUID = 1L;
      private int inserted;

      public void actionPerformed(ActionEvent e) {
        final int row = table.getSelectedRow();
        if (row != -1) {
          tableModel.insertRow(table.convertRowIndexToModel(row),
                new Object[] { "Inserted Row", Integer.valueOf(++inserted) });
        }
      }
    });
    am.put("delete row", new AbstractAction() {

      private static final long serialVersionUID = 1L;

      public void actionPerformed(ActionEvent e) {
        final int row = table.getSelectedRow();
        if (row != -1) {
          tableModel.removeRow(table.convertRowIndexToModel(row));
        }
      }
    });

    final JPanel contentPane = new JPanel(new BorderLayout(6, 6));
    contentPane.add(new JScrollPane(table));

    final JFrame f = new JFrame("Test Frame: JTableKeyMapTest"); //$NON-NLS-1$
    f.setContentPane(contentPane);
    f.pack();
    f.setLocationRelativeTo(null);
    f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    f.setVisible(true);
  }

  /** @param args ignored */
  public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {

      public void run() {
        createAndShowGui();
      }
    });
  }
}
Ebenius
PS: Hab mir Deinen Code nicht angesehen…
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Eine Spezielle (JTable) Liste, wie kann ich das machen? AWT, Swing, JavaFX & SWT 3
I Swing JTable zeichnet kein vertical Grid AWT, Swing, JavaFX & SWT 6
J Drag und drop aus einer JTable - bitte um Unterstützung AWT, Swing, JavaFX & SWT 2
S HPRO und UPRO gemeinsame JTABLE gemeinsamer RENDERER ? AWT, Swing, JavaFX & SWT 1
F Swing JTable - MultiHeader inkl. Eingabemöglichkeit AWT, Swing, JavaFX & SWT 1
S JTable - Feldinhalte anzeigen AWT, Swing, JavaFX & SWT 15
D Swing JTable Spaltenbreite AWT, Swing, JavaFX & SWT 1
W Gibt es einen "automatischen Listener" in Swing oder JTable oder der ATM-Klasse? AWT, Swing, JavaFX & SWT 14
G jTable - getSelectedRow() AWT, Swing, JavaFX & SWT 3
I JTable mit einem Button zu einer Detail Seite springen AWT, Swing, JavaFX & SWT 4
P JTable Listener für die Änderung einzelner Zellen oder Rows AWT, Swing, JavaFX & SWT 2
D Tastaturabfragen CTRL+t, CTRL+E bei eine JTable, bestehend aus JTextAteas AWT, Swing, JavaFX & SWT 4
P Checkboxes in JTable nicht editable AWT, Swing, JavaFX & SWT 9
F Best-Practise: JTable Text in Zelle zu groß AWT, Swing, JavaFX & SWT 2
izoards JTable in CSV File schreiben... AWT, Swing, JavaFX & SWT 23
Kohl Jedes Objekt einer JTable um ein Zeichen verkürzen AWT, Swing, JavaFX & SWT 7
I JTable, DefaultTableModel, zwei Zahlen multiplizieren. AWT, Swing, JavaFX & SWT 26
M JTABLE / wie oft wurde gewürfelt. AWT, Swing, JavaFX & SWT 1
F JTable vergrößern AWT, Swing, JavaFX & SWT 2
H JTable: Diverse NullPointer-Exceptions zur Laufzeit AWT, Swing, JavaFX & SWT 3
J Swing Werte des JTable werden nicht angezeigt AWT, Swing, JavaFX & SWT 9
T Swing JTable cellRenderer mit jpg Hintergrundfarbe lässt sich nicht ändern. AWT, Swing, JavaFX & SWT 1
HoT Einzelne Zelle in JTable Rahmen unten setzen AWT, Swing, JavaFX & SWT 24
B JTable Zellen zusammenfügen AWT, Swing, JavaFX & SWT 3
M Swing Cell Renderer für Zeilenumbruch in JTable AWT, Swing, JavaFX & SWT 0
H JTable im JSplitPane darstellen AWT, Swing, JavaFX & SWT 2
MadMax2506 Swing JTable lädt sehr lange AWT, Swing, JavaFX & SWT 1
D Zeilenumbruch in einer JTable AWT, Swing, JavaFX & SWT 9
R Swing JTable und Spaltenausrichtung AWT, Swing, JavaFX & SWT 8
G JTable füllen AWT, Swing, JavaFX & SWT 1
H JTable TableCellEditor-Problem AWT, Swing, JavaFX & SWT 0
W Swing JTable Zeilenumbruch innerhalb einer Zelle AWT, Swing, JavaFX & SWT 3
J Datensatz in jTable ausgeben AWT, Swing, JavaFX & SWT 3
M Swing Automatischer Editorstart in JTable-Zelle AWT, Swing, JavaFX & SWT 5
ralfb1105 Swing JTable aktualisieren AWT, Swing, JavaFX & SWT 5
adiko01 JTable: Nur markierte Zeilen aus der Tabelle in CSV exportiern AWT, Swing, JavaFX & SWT 9
M JTable.setDefaultRenderer(...) greift nicht AWT, Swing, JavaFX & SWT 0
J JTable: Eingabe in Tabellenzelle korrigieren AWT, Swing, JavaFX & SWT 4
T Problem mit JTable Sortierung AWT, Swing, JavaFX & SWT 2
D JTable nach INSERT aktualisieren /refreshen AWT, Swing, JavaFX & SWT 1
D MySQL Daten in JTable anzeigen AWT, Swing, JavaFX & SWT 2
H Swing Jtable extra spalte AWT, Swing, JavaFX & SWT 6
S Swing Rechteck über JTable zeichnen (per MouseListener) AWT, Swing, JavaFX & SWT 1
S Swing Mal wieder JTable Ansicht aktualisieren AWT, Swing, JavaFX & SWT 10
A JTable mit Daten füllen AWT, Swing, JavaFX & SWT 1
VfL_Freak Swing Einzelne Zeile in jTable selektieren klappt nicht AWT, Swing, JavaFX & SWT 7
N AWT jTable CellRenderer AWT, Swing, JavaFX & SWT 6
T Swing JTable valueChanged datensatz löschen AWT, Swing, JavaFX & SWT 1
0 Swing JTable aus anderer Klasse updaten AWT, Swing, JavaFX & SWT 5
S Jtable defaultRenderer wohin damit ? AWT, Swing, JavaFX & SWT 23
T Swing JTable / FocusListener AWT, Swing, JavaFX & SWT 0
it_is_all Warum wird die JTable im JDialog nicht angezeigt? AWT, Swing, JavaFX & SWT 1
L Swing JTable im Panel darstellen AWT, Swing, JavaFX & SWT 8
T Swing Double Click bei Buttons in JTable AWT, Swing, JavaFX & SWT 9
J addRow bei JTable AWT, Swing, JavaFX & SWT 6
M Jtable gibt -1 wert bei selectedRow und Column AWT, Swing, JavaFX & SWT 3
Meeresgott Swing JTable AWT, Swing, JavaFX & SWT 4
J JTable Selection Listener funktioniert nicht AWT, Swing, JavaFX & SWT 4
C Swing Daten in JTable wiedergeben per TableModel und MVC Pattern AWT, Swing, JavaFX & SWT 16
Z Swing Drag&Drop zwischen JTable und JTree AWT, Swing, JavaFX & SWT 4
Thallius JTable dynamisch Spaltenanzahl verändern AWT, Swing, JavaFX & SWT 2
Thallius JTable dynamisch laden? AWT, Swing, JavaFX & SWT 2
B Swing JTable sortieren AWT, Swing, JavaFX & SWT 2
T Swing JTable auslesen und befüllen AWT, Swing, JavaFX & SWT 8
B JTable wird nicht angezeigt AWT, Swing, JavaFX & SWT 1
J JTable und Suchlogik AWT, Swing, JavaFX & SWT 4
Viktim Swing JTable mit Tab verlassen AWT, Swing, JavaFX & SWT 1
F Swing Spaltenbreite einer Column eines JTable auslesen AWT, Swing, JavaFX & SWT 5
Viktim Swing JTable Mit Tab druch Zeilen Wechseln AWT, Swing, JavaFX & SWT 5
Thallius Warum refrehsed mein JTable nicht? AWT, Swing, JavaFX & SWT 5
Ghostman1711 Hinzufügen ausgewählter Dateinen des Filechoosers zu einem JTable AWT, Swing, JavaFX & SWT 9
S Swing JTable - Einzelne Rows einfärben AWT, Swing, JavaFX & SWT 11
M Wert einer Zelle aus JTable ziehen AWT, Swing, JavaFX & SWT 4
K JTable getValueAt() klappt nicht immer AWT, Swing, JavaFX & SWT 1
K JTable in extra Klasse, Zugriff in einer anderen klasse nicht möglich AWT, Swing, JavaFX & SWT 26
B Swing Tabelle(JTable) filtern swing GUI AWT, Swing, JavaFX & SWT 3
P JTable - bei Eingabe Selektion AWT, Swing, JavaFX & SWT 0
P Fokus auf Zelle in JTable AWT, Swing, JavaFX & SWT 1
S Swing Deselektion in JTable verhindern AWT, Swing, JavaFX & SWT 0
D Problem mit JTable AWT, Swing, JavaFX & SWT 1
N Swing Print JTable mit AbstractTableModel AWT, Swing, JavaFX & SWT 1
Ananaskirsche Swing jTable Reihen zuviel eingefügt AWT, Swing, JavaFX & SWT 12
P im JTable die Schriftfarbe ändern AWT, Swing, JavaFX & SWT 19
T Swing JTable wird nicht angezeigt AWT, Swing, JavaFX & SWT 4
S Dreiecke in bestimmte Zellen einer JTable AWT, Swing, JavaFX & SWT 9
LexeB4F Zelle in JTable gezielt einfärben AWT, Swing, JavaFX & SWT 4
LexeB4F JTable mehrere Zelle selektieren und inhalte Löschen.. Ideen gesucht AWT, Swing, JavaFX & SWT 1
D Swing JTable Renderer Grafikfehler AWT, Swing, JavaFX & SWT 0
K Swing JTable mit ImageIcon und Text in einer Zelle AWT, Swing, JavaFX & SWT 1
M Swing JTable GroupableHeader Background Color AWT, Swing, JavaFX & SWT 4
K Swing JTable updaten AWT, Swing, JavaFX & SWT 9
thet1983 Swing MySQL >> JTable AWT, Swing, JavaFX & SWT 5
J JTable bounds ändern durch resizing des Fensters AWT, Swing, JavaFX & SWT 9
F JTable Zellen-Hintergrund ändern AWT, Swing, JavaFX & SWT 7
O JTable linksbündig drucken (nicht der Zelleninhalt) AWT, Swing, JavaFX & SWT 2
Crazynet xls Datei in JTable AWT, Swing, JavaFX & SWT 3
O JTable ohne Rahmen printen AWT, Swing, JavaFX & SWT 3
L Swing JTable refresht die Column Namen nicht AWT, Swing, JavaFX & SWT 0
K JTable komplett durch andere ersetzen AWT, Swing, JavaFX & SWT 4
S JTable übernimmt Änderungen nicht AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben