Checkbox in Tabelle

Status
Nicht offen für weitere Antworten.

LordTerra

Aktives Mitglied
hi

also da bin ich wieder :)

so folgendes problem:

ich möchte in eine tabelle ein popupfeld einbaun...
also hab ich mich im inet umgeguckt und folgendes gefunden und n bissel für mich angepasst:

Aufruf:
Code:
setObjectTypCBoxColumn(jTableEigenschaften, jTableEigenschaften.getColumnModel().getColumn(col), row, col);

Funktion:
Code:
    public void setObjectTypCBoxColumn(JTable table, TableColumn column, int row, int col) {
    	//Set up the editor for the sport cells.
		JComboBox comboBox = new JComboBox();
		String config = model.getValueAt(0, 1).toString();   
		String parameter = model.getValueAt(row, col-1).toString();
		
		String erg[][]=DB.getCBoxInhalt(config, parameter);
		int erg_len=erg.length;
		for(int i=0; i<erg_len; i++){
			if(erg[i][0]==null){break;}
			comboBox.addItem(""+erg[i][1]);
		}
		column.setCellEditor(new DefaultCellEditor(comboBox));
		
		//Set up tool tips for the sport cells.
		DefaultTableCellRenderer renderer =	new DefaultTableCellRenderer();
		renderer.setToolTipText("Klick auf das Auswahl-Feld");
		column.setCellRenderer(renderer);
    }

soweit sogut...

jetzt möchte ich aber nicht eine komplette Spalte mit diesem Checkbox-Feld füllen sondern nur die Spalte col in Zeile row...

wie bekomm ich das nun wieder hin???
thx für help LordTerra
 

André Uhres

Top Contributor
getCellEditor/getCellRenderer in JTable überschreiben und den gewünschten Editor/Renderer zurückgeben:
Code:
package table2;
/*
* TableComboDemo.java
*/
import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;
public class TableComboDemo extends JFrame {
    private JTable jTableEigenschaften;
    private DefaultTableModel model;
    private DefaultCellEditor sportEditor;
    private DefaultTableCellRenderer sportRenderer;
    private int sportCol, sportRow;
    public TableComboDemo() {
        super("Table Combo Demo");
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setSize(400, 300);
        setLocationRelativeTo(null);
        jTableEigenschaften = new JTable(){
            public TableCellEditor getCellEditor(final int row, final int col) {
                if (row==sportRow && col==sportCol) return sportEditor;
                return super.getCellEditor(row,col);
            }
            public TableCellRenderer getCellRenderer(final int row, final int col) {
                if (row==sportRow && col==sportCol) return sportRenderer;
                return super.getCellRenderer(row,col);
            }
        };
        jTableEigenschaften.setModel(new DefaultTableModel(
                new Object [][] {
                    {"1", "1", "1", "1"},
                    {"2", "Sport", "2", "2"},
                    {"3", "3", "3", "3"},
                    {"4", "4", "4", "4"}
        },
                new String [] {"Title 1", "Title 2", "Title 3", "Title 4"}
        ) {
            Class[] types = new Class [] {String.class, String.class, String.class, String.class};
            public Class getColumnClass(final int columnIndex) {
                return types [columnIndex];
            }
        });
        getContentPane().add(new JScrollPane(jTableEigenschaften), BorderLayout.CENTER);
        model = (DefaultTableModel)jTableEigenschaften.getModel();
        int col = 1;
        int row = 1;
        setSportBox(row, col);
    }
    public void setSportBox(final int row, final int col) {
        //Set up the editor for the sport cells.
        JComboBox sportBox = new JComboBox();
        String[] sports = new String[]{"football", "basketball", "hockey"};
        for(int i=0; i<sports.length; i++){
            sportBox.addItem(sports[i]);
        }
        sportEditor = new DefaultCellEditor(sportBox);
        //Set up tool tips for the sport cells.
        DefaultTableCellRenderer renderer =   new DefaultTableCellRenderer();
        renderer.setToolTipText("Klick auf das Auswahl-Feld");
        sportRenderer = renderer;
        sportRow = row;
        sportCol = col;
    }
    public static void main(final String args[]) {new TableComboDemo().setVisible(true);}
}
Siehe auch: http://www.javaworld.com/javaworld/javatips/jw-javatip102.html
 

LordTerra

Aktives Mitglied
Code:
	JTable jTableEigenschaften = new JTable(model){ 
        public TableCellEditor getCellEditor(final int row, final int col) { 
            if (row==defRow && col==defCol) return defEditor; 
            return super.getCellEditor(row,col); 
        } 
        public TableCellRenderer getCellRenderer(final int row, final int col) { 
            if (row==defRow && col==defCol) return defRenderer; 
            return super.getCellRenderer(row,col); 
        } 
    };


Code:
setObjectTypCBox(row, col);

Code:
    public void setObjectTypCBox(int row, int col) {
    	//Set up the editor for the sport cells.
		JComboBox comboBox = new JComboBox();
		String config = model.getValueAt(0, 1).toString();   
		String parameter = model.getValueAt(row, col-1).toString();
		
		String erg[][]=DB.getCBoxInhalt(config, parameter);
		int erg_len=erg.length;
		for(int i=0; i<erg_len; i++){
			if(erg[i][0]==null){break;}
			comboBox.addItem(""+erg[i][1]);
		}
		defEditor = new DefaultCellEditor(comboBox); 
        //Set up tool tips for the sport cells. 
        DefaultTableCellRenderer renderer = new DefaultTableCellRenderer(); 
        renderer.setToolTipText("Klick auf das Auswahl-Feld"); 
        defRenderer = renderer; 
        defRow = row; 
        defCol = col; 

    }

^^ so hab ich das jetzt ...
schmeisst mir aber nullpointerexceptions beim erzeugen der tabelle...

Code:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at javax.swing.JTable.prepareRenderer(Unknown Source)
	at javax.swing.plaf.basic.BasicTableUI.paintCell(Unknown Source)
	at javax.swing.plaf.basic.BasicTableUI.paintCells(Unknown Source)
	at javax.swing.plaf.basic.BasicTableUI.paint(Unknown Source)
	at javax.swing.plaf.ComponentUI.update(Unknown Source)
	at javax.swing.JComponent.paintComponent(Unknown Source)
	at javax.swing.JComponent.paint(Unknown Source)
	at javax.swing.JComponent.paintChildren(Unknown Source)
	at javax.swing.JComponent.paint(Unknown Source)
	at javax.swing.JViewport.paint(Unknown Source)
	at javax.swing.JComponent.paintChildren(Unknown Source)
	at javax.swing.JComponent.paint(Unknown Source)
	at javax.swing.JComponent.paintChildren(Unknown Source)
	at javax.swing.JComponent.paint(Unknown Source)
	at javax.swing.JComponent.paintChildren(Unknown Source)
	at javax.swing.JComponent.paint(Unknown Source)
	at javax.swing.JLayeredPane.paint(Unknown Source)
	at javax.swing.JComponent.paintChildren(Unknown Source)
	at javax.swing.JComponent.paint(Unknown Source)
	at javax.swing.JComponent.paintToOffscreen(Unknown Source)
	at javax.swing.BufferStrategyPaintManager.paint(Unknown Source)
	at javax.swing.RepaintManager.paint(Unknown Source)
	at javax.swing.JComponent._paintImmediately(Unknown Source)
	at javax.swing.JComponent.paintImmediately(Unknown Source)
	at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
	at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
	at javax.swing.RepaintManager.seqPaintDirtyRegions(Unknown Source)
	at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(Unknown Source)
	at java.awt.event.InvocationEvent.dispatch(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
 

André Uhres

Top Contributor
Dein Code funktioniert bei mir:
Code:
package table2;
/*
* TableComboDemo_1.java
*/
import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;
public class TableComboDemo_1 extends JFrame {
    private JTable jTableEigenschaften;
    private DefaultTableModel model;
    private DefaultCellEditor defEditor;
    private DefaultTableCellRenderer defRenderer;
    private int defRow;
    private int defCol;
    public TableComboDemo_1() {
        super("Table Combo Demo");
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setSize(400, 300);
        setLocationRelativeTo(null);
        model = new DefaultTableModel(
                new Object [][] {
                    {"1", "1", "1", "1"},
                    {"2", "Sport", "2", "2"},
                    {"3", "3", "3", "3"},
                    {"4", "4", "4", "4"}
        },
                new String [] {"Title 1", "Title 2", "Title 3", "Title 4"}
        ) {
            Class[] types = new Class [] {String.class, String.class, String.class, String.class};
            public Class getColumnClass(final int columnIndex) {
                return types [columnIndex];
            }
        };
        JTable jTableEigenschaften = new JTable(model){
            public TableCellEditor getCellEditor(final int row, final int col) {
                if (row==defRow && col==defCol) return defEditor;
                return super.getCellEditor(row,col);
            }
            public TableCellRenderer getCellRenderer(final int row, final int col) {
                if (row==defRow && col==defCol) return defRenderer;
                return super.getCellRenderer(row,col);
            }
        };
        getContentPane().add(new JScrollPane(jTableEigenschaften), BorderLayout.CENTER);
        int col = 1;
        int row = 1;
        setObjectTypCBox(row, col);
    }
    public void setObjectTypCBox(int row, int col) {
        //Set up the editor for the sport cells.
        JComboBox comboBox = new JComboBox();
        String config = model.getValueAt(0, 1).toString();
        String parameter = model.getValueAt(row, col-1).toString();
       
        String erg[][]=DB.getCBoxInhalt(config, parameter);
        int erg_len=erg.length;
        for(int i=0; i<erg_len; i++){
            if(erg[i][0]==null){break;}
            comboBox.addItem(""+erg[i][1]);
        }
        defEditor = new DefaultCellEditor(comboBox);
        //Set up tool tips for the sport cells.
        DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
        renderer.setToolTipText("Klick auf das Auswahl-Feld");
        defRenderer = renderer;
        defRow = row;
        defCol = col;
       
    }
    public static void main(final String args[]) {new TableComboDemo_1().setVisible(true);}
}
class DB{
    public static String[][] getCBoxInhalt(String config, String parameter) {
        return new String[][]{{"","football"},{"","basketball"},{"","hockey"}};
    }
}
 

LordTerra

Aktives Mitglied
hmmm ich geh ma davon aus da ich folgendes noch mach:

Code:
	private JScrollPane getJScrollPaneEigenschaften() {
		if (jScrollPaneEigenschaften == null) {
			jScrollPaneEigenschaften = new JScrollPane();
			jScrollPaneEigenschaften.setVisible(false);
			jScrollPaneEigenschaften.setBounds(new Rectangle(800, 15, 185, 500));
			jScrollPaneEigenschaften.setViewportView(getJTableEigenschaften());
			jTableEigenschaften.setDefaultEditor(Object.class, new IntEditor()); 

		}
		return jScrollPaneEigenschaften;
	}

Code:
	class IntEditor extends JTextField implements TableCellEditor, DocumentListener{ 
	    private List<CellEditorListener> listeners = new ArrayList<CellEditorListener>(); 
	    private int akt_row=0; 
	    private int akt_col=0;
	    public IntEditor(){ 
	        // Der Editor hört sich selbst ab, so kann er auf jede Benutzereingabe reagieren 
	        getDocument().addDocumentListener( this ); 
	    } 

	    public Component getTableCellEditorComponent( JTable table, Object value, boolean isSelected, int row, int column ) { 
	        // Diese Methode wird von der JTable aufgerufen, wenn der Editor angezeigt werden soll
	    	akt_row=row;
	    	akt_col=column;
	        setText( value.toString() ); 
	        return this; 
	    } 

	    public void addCellEditorListener( CellEditorListener l ) { 
	        listeners.add( l ); 
	    } 

	    public void cancelCellEditing() { 
	    	// Falls abgebrochen wird, werden alle Listeners informiert 
	        ChangeEvent event = new ChangeEvent( this ); 
	        for( CellEditorListener listener : listeners.toArray( new CellEditorListener[ listeners.size() ] )) 
	            listener.editingCanceled( event ); 
	    } 

	    public Object getCellEditorValue() { 
	        // Gibt den aktuellen Wert des Editors zurück 
	    	return getText(); 
	    } 

	    public boolean isCellEditable( EventObject anEvent ) { 
	        // Im Falle eines MouseEvents, muss ein Doppelklick erfolgen, um den Editor zu aktivieren. 
	        // Ansonsten wird der Editor auf jeden Fall aktiviert 
	        if( anEvent instanceof MouseEvent ) 
	            return ((MouseEvent)anEvent).getClickCount() > 1; 
	            
	        return true; 
	    } 

	    public void removeCellEditorListener( CellEditorListener l ) { 
	        listeners.remove( l ); 
	    } 

	    public boolean shouldSelectCell( EventObject anEvent ) { 
	        return true; 
	    } 

	    public boolean stopCellEditing() { 
    	
	        // Sollte die Eingabe falsch sein, darf das editieren nich gestoppt werden 
	        if( !isValid_Spalte() ) {
	        		return false;	            
	        }
	        // Ansonsten werden die Listener vom stop unterrichtet 
	        ChangeEvent event = new ChangeEvent( this ); 
	        for( CellEditorListener listener : listeners.toArray( new CellEditorListener[ listeners.size() ] )) 
	            listener.editingStopped( event ); 
	        
	        return true; 
	    } 

	    public void changedUpdate( DocumentEvent e ) { 
	        update(); 
	    } 

	    public void insertUpdate( DocumentEvent e ) { 
	        update(); 
	    } 

	    public void removeUpdate( DocumentEvent e ) { 
	        update(); 
	    } 

	    private boolean isValid_Spalte(){ 
	    	String parameter=""+model.getValueAt(akt_row, akt_col-1).toString();
	    	int objects_id=Integer.parseInt(""+model.getValueAt(2, 1).toString());
	    	// Bestimmt, was eine gültige Eingabe ist.
	    	int erg = DB.getSpaltenDeklaration(parameter,objects_id);
	    	if(erg==1){
	    		return getText().matches( "[0-9]+" );
	    	}else{
		    	if(erg==2){
		    		return getText().matches( "[a-zA-Z0-9]+" );
		    	}else{
		    		return getText().matches( "[a-zA-Z0-9]+" );
		    	}
	    	}
	    } 
	    
	    private void setPos(String eigenschaft){
	        for(int i=0 ;i<labelarray.length; i++){
	        	if(labelarray[i]==null){
	        		break;
	        	}
	        	String akt_obj_titel = labelarray[i].getTitle();
	        	String akt_obj[] = GlobaleFunction.split(akt_obj_titel, ":");
        		int pos = Integer.parseInt(getText());
	        	if(akt_obj[0].compareToIgnoreCase(""+model.data[2][1])==0){
	        		int pos_x=labelarray[i].getX();
	        		int pos_y=labelarray[i].getY();
	        		int size_x=labelarray[i].getWidth();
	        		int size_y=labelarray[i].getHeight();
	
	        		if(eigenschaft.compareToIgnoreCase("pos_x")==0){
	        			labelarray[i].setBounds(pos, pos_y, size_x, size_y);
	        		}
	        		if(eigenschaft.compareToIgnoreCase("pos_y")==0){
	        			labelarray[i].setBounds(pos_x, pos, size_x, size_y);
	        		}
	        		if(eigenschaft.compareToIgnoreCase("size_x")==0){
	        			labelarray[i].setBounds(pos_x, pos_y, pos, size_y);
	        		}
	        		if(eigenschaft.compareToIgnoreCase("size_y")==0){
	        			labelarray[i].setBounds(pos_x, pos_y, size_x, pos);
	        		}
	        	}
	        }
	    }
	    
	    private void setObjektLabel(String objektID){
	        for(int i=0 ;i<labelarray.length; i++){
	        	if(labelarray[i]==null){
	        		break;
	        	}
	        	String akt_obj_titel = labelarray[i].getTitle();
	        	String akt_obj[] = GlobaleFunction.split(akt_obj_titel, ":");
	        	if(akt_obj[0].compareToIgnoreCase(objektID)==0){
	        		labelarray[i].setTitle(akt_obj[0]+":"+getText());
	        	}
	        }
	    }
	    
	    public void update(){ 
	        // Verändert die Umrandung des Editors, jenachdem, ob eine gültige 
	        // oder eine ungültige Eingabe gemacht wurde 
	        Color color; 
	        String eigenschaft = model.getValueAt(akt_row, akt_col-1).toString();
	        if(eigenschaft.compareToIgnoreCase("Objekt")==0){
	        	if( isValid_Spalte() ){
	        		color = Color.GREEN;
	        		String objektID=""+model.data[2][1];
	        		setObjektLabel(objektID);
		        }else {
		            color = Color.RED; 
		        }
	        }
	        
	        if((eigenschaft.compareToIgnoreCase("pos_x")==0)||
	           (eigenschaft.compareToIgnoreCase("pos_y")==0)||
	           (eigenschaft.compareToIgnoreCase("size_x")==0)||
	           (eigenschaft.compareToIgnoreCase("size_y")==0)
	        ){
	        	if( isValid_Spalte() ){
	        		color = Color.GREEN;
	        		setPos(eigenschaft);
		        }else {
		            color = Color.RED; 
		        }
	        }else{
		        if( isValid_Spalte() ){ 
		            color = Color.GREEN;
		        }else {
		            color = Color.RED; 
		        }
	        }
		    setBorder( BorderFactory.createLineBorder( color )); 
	    } 
	}

das das mit dem anderen den ich da definier sich etwas überschneidet und daher die exception schmeisst ...
 

LordTerra

Aktives Mitglied
so ok ich habs...

also ich hab festgestellt das: wenn ich den renderer überschreib das programm die nullpointerexception schmeisst...
ich nehm an es liegt daran das ich ja in dem Zelleneditor auch schon eine funktion drin hab so sowas macht und sich die dann irgendwie überlagern und es dadurch zum fehler kommt...

naja wie dem auch sei jetzt geht es :)

dank dir andre
 

André Uhres

Top Contributor
Dein Code funktioniert auch bei mir:
Code:
package table2;
/*
* TableComboDemo_1.java
*/
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.util.List;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;
public class TableComboDemo_1 extends JFrame {
    private JTable jTableEigenschaften;
    private MeinTableModel model;
    private DefaultCellEditor defEditor;
    private DefaultTableCellRenderer defRenderer;
    private int defRow;
    private int defCol;
    private MeinLabel[] labelarray;
    private JScrollPane jScrollPaneEigenschaften;
    public TableComboDemo_1() {
        super("Table Combo Demo");
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setSize(400, 300);
        setLocationRelativeTo(null);
        jScrollPaneEigenschaften = getJScrollPaneEigenschaften();
        jScrollPaneEigenschaften.setVisible(true);
        getContentPane().add(jScrollPaneEigenschaften, BorderLayout.CENTER);
        int col = 1;
        int row = 1;
        setObjectTypCBox(row, col);
    }
    private JScrollPane getJScrollPaneEigenschaften() {
        if (jScrollPaneEigenschaften == null) {
            jScrollPaneEigenschaften = new JScrollPane();
            jScrollPaneEigenschaften.setVisible(false);
            jScrollPaneEigenschaften.setBounds(new Rectangle(800, 15, 185, 500));
            jScrollPaneEigenschaften.setViewportView(getJTableEigenschaften());
            jTableEigenschaften.setDefaultEditor(Object.class, new IntEditor());
           
        }
        return jScrollPaneEigenschaften;
    }
    public void setObjectTypCBox(int row, int col) {
        //Set up the editor for the sport cells.
        JComboBox comboBox = new JComboBox();
        String config = model.getValueAt(0, 1).toString();
        String parameter = model.getValueAt(row, col-1).toString();
       
        String erg[][]=DB.getCBoxInhalt(config, parameter);
        int erg_len=erg.length;
        for(int i=0; i<erg_len; i++){
            if(erg[i][0]==null){break;}
            comboBox.addItem(""+erg[i][1]);
        }
        defEditor = new DefaultCellEditor(comboBox);
        //Set up tool tips for the sport cells.
        DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
        renderer.setToolTipText("Klick auf das Auswahl-Feld");
        defRenderer = renderer;
        defRow = row;
        defCol = col;
       
    }
    public static void main(final String args[]) {new TableComboDemo_1().setVisible(true);}
   
    private JTable getJTableEigenschaften() {
        model = new MeinTableModel(
                new Object [][] {
                    {"1", "1", "1", "1"},
                    {"2", "Sport", "2", "2"},
                    {"3", "3", "3", "3"},
                    {"4", "4", "4", "4"}
        },
                new String [] {"Title 1", "Title 2", "Title 3", "Title 4"}
        ) {
            Class[] types = new Class [] {String.class, String.class, String.class, String.class};
            public Class getColumnClass(final int columnIndex) {
                return types [columnIndex];
            }
        };
        JTable jTableEigenschaften = new JTable(model){
            public TableCellEditor getCellEditor(final int row, final int col) {
                if (row==defRow && col==defCol) return defEditor;
                return super.getCellEditor(row,col);
            }
            public TableCellRenderer getCellRenderer(final int row, final int col) {
                if (row==defRow && col==defCol) return defRenderer;
                return super.getCellRenderer(row,col);
            }
        };
        this.jTableEigenschaften = jTableEigenschaften;
        return jTableEigenschaften;
    }
    class IntEditor extends JTextField implements TableCellEditor, DocumentListener{
        private List<CellEditorListener> listeners = new ArrayList<CellEditorListener>();
        private int akt_row=0;
        private int akt_col=0;
        public IntEditor(){
            // Der Editor hört sich selbst ab, so kann er auf jede Benutzereingabe reagieren
            getDocument().addDocumentListener( this );
        }
       
        public Component getTableCellEditorComponent( JTable table, Object value, boolean isSelected, int row, int column ) {
            // Diese Methode wird von der JTable aufgerufen, wenn der Editor angezeigt werden soll
            akt_row=row;
            akt_col=column;
            setText( value.toString() );
            return this;
        }
       
        public void addCellEditorListener( CellEditorListener l ) {
            listeners.add( l );
        }
       
        public void cancelCellEditing() {
            // Falls abgebrochen wird, werden alle Listeners informiert
            ChangeEvent event = new ChangeEvent( this );
            for( CellEditorListener listener : listeners.toArray( new CellEditorListener[ listeners.size() ] ))
                listener.editingCanceled( event );
        }
       
        public Object getCellEditorValue() {
            // Gibt den aktuellen Wert des Editors zurück
            return getText();
        }
       
        public boolean isCellEditable( EventObject anEvent ) {
            // Im Falle eines MouseEvents, muss ein Doppelklick erfolgen, um den Editor zu aktivieren.
            // Ansonsten wird der Editor auf jeden Fall aktiviert
            if( anEvent instanceof MouseEvent )
                return ((MouseEvent)anEvent).getClickCount() > 1;
           
            return true;
        }
       
        public void removeCellEditorListener( CellEditorListener l ) {
            listeners.remove( l );
        }
       
        public boolean shouldSelectCell( EventObject anEvent ) {
            return true;
        }
       
        public boolean stopCellEditing() {
           
            // Sollte die Eingabe falsch sein, darf das editieren nich gestoppt werden
            if( !isValid_Spalte() ) {
                return false;
            }
            // Ansonsten werden die Listener vom stop unterrichtet
            ChangeEvent event = new ChangeEvent( this );
            for( CellEditorListener listener : listeners.toArray( new CellEditorListener[ listeners.size() ] ))
                listener.editingStopped( event );
           
            return true;
        }
       
        public void changedUpdate( DocumentEvent e ) {
            update();
        }
       
        public void insertUpdate( DocumentEvent e ) {
            update();
        }
       
        public void removeUpdate( DocumentEvent e ) {
            update();
        }
       
        private boolean isValid_Spalte(){
            String parameter=""+model.getValueAt(akt_row, akt_col-1).toString();
            int objects_id=Integer.parseInt(""+model.getValueAt(2, 1).toString());
            // Bestimmt, was eine gültige Eingabe ist.
            int erg = DB.getSpaltenDeklaration(parameter,objects_id);
            if(erg==1){
                return getText().matches( "[0-9]+" );
            }else{
                if(erg==2){
                    return getText().matches( "[a-zA-Z0-9]+" );
                }else{
                    return getText().matches( "[a-zA-Z0-9]+" );
                }
            }
        }
       
        private void setPos(String eigenschaft){
            for(int i=0 ;i<labelarray.length; i++){
                if(labelarray[i]==null){
                    break;
                }
                String akt_obj_titel = labelarray[i].getTitle();
                String akt_obj[] = GlobaleFunction.split(akt_obj_titel, ":");
                int pos = Integer.parseInt(getText());
                if(akt_obj[0].compareToIgnoreCase(""+model.data[2][1])==0){
                    int pos_x=labelarray[i].getX();
                    int pos_y=labelarray[i].getY();
                    int size_x=labelarray[i].getWidth();
                    int size_y=labelarray[i].getHeight();
                   
                    if(eigenschaft.compareToIgnoreCase("pos_x")==0){
                        labelarray[i].setBounds(pos, pos_y, size_x, size_y);
                    }
                    if(eigenschaft.compareToIgnoreCase("pos_y")==0){
                        labelarray[i].setBounds(pos_x, pos, size_x, size_y);
                    }
                    if(eigenschaft.compareToIgnoreCase("size_x")==0){
                        labelarray[i].setBounds(pos_x, pos_y, pos, size_y);
                    }
                    if(eigenschaft.compareToIgnoreCase("size_y")==0){
                        labelarray[i].setBounds(pos_x, pos_y, size_x, pos);
                    }
                }
            }
        }
       
        private void setObjektLabel(String objektID){
            for(int i=0 ;i<labelarray.length; i++){
                if(labelarray[i]==null){
                    break;
                }
                String akt_obj_titel = labelarray[i].getTitle();
                String akt_obj[] = GlobaleFunction.split(akt_obj_titel, ":");
                if(akt_obj[0].compareToIgnoreCase(objektID)==0){
                    labelarray[i].setTitle(akt_obj[0]+":"+getText());
                }
            }
        }
       
        public void update(){
            // Verändert die Umrandung des Editors, jenachdem, ob eine gültige
            // oder eine ungültige Eingabe gemacht wurde
            Color color;
            String eigenschaft = model.getValueAt(akt_row, akt_col-1).toString();
            if(eigenschaft.compareToIgnoreCase("Objekt")==0){
                if( isValid_Spalte() ){
                    color = Color.GREEN;
                    String objektID=""+model.data[2][1];
                    setObjektLabel(objektID);
                }else {
                    color = Color.RED;
                }
            }
           
            if((eigenschaft.compareToIgnoreCase("pos_x")==0)||
                    (eigenschaft.compareToIgnoreCase("pos_y")==0)||
                    (eigenschaft.compareToIgnoreCase("size_x")==0)||
                    (eigenschaft.compareToIgnoreCase("size_y")==0)
                    ){
                if( isValid_Spalte() ){
                    color = Color.GREEN;
                    setPos(eigenschaft);
                }else {
                    color = Color.RED;
                }
            }else{
                if( isValid_Spalte() ){
                    color = Color.GREEN;
                }else {
                    color = Color.RED;
                }
            }
            setBorder( BorderFactory.createLineBorder( color ));
        }
    }
}
/*
 * Die folgenden Klassen sind einfach nur minimale Testversionen
 * die lediglich dazu dienen, das Ganze ausführbar zu machen
 */
class DB{
    public static String[][] getCBoxInhalt(String config, String parameter) {
        return new String[][]{{"","football"},{"","basketball"},{"","hockey"}};
    }
   
    public static int getSpaltenDeklaration(String parameter, int objects_id) {
        return 1;
    }
}
class GlobaleFunction{
    public static String[] split(String akt_obj_titel, String string) {
        return akt_obj_titel.split(string);
    }
}
class MeinLabel extends JLabel{
    private String title;
    public String getTitle() {
        return title;
    }
    public void setTitle(String string) {
        title = string;
    }
}
class MeinTableModel extends DefaultTableModel{
    Object[][] data;
    public MeinTableModel(Object[][] data, Object[] columnNames){
        super(data, columnNames);
        this.data = data;
        addTableModelListener(new TableModelListener() {
            public void tableChanged(TableModelEvent e) {
                dataToArray();
            }
        });
    }
    private void dataToArray(){
        Vector dataVector = getDataVector();
        MeinTableModel.this.data = new Object[dataVector.size()][];
        for (int i = 0; i < MeinTableModel.this.data.length; i++) {
            MeinTableModel.this.data[i] = ((Vector)dataVector.get(i)).toArray();
        }
    }

    public boolean isCellEditable(int row, int column) {
        if(column == 0) return false;
        return true;
    }
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Checkbox in einer Tabelle AWT, Swing, JavaFX & SWT 10
V CheckBox in Tabelle zeichnen AWT, Swing, JavaFX & SWT 2
B JavaFX CheckBox mit ChangeListener AWT, Swing, JavaFX & SWT 1
A checkbox in einer TableView abhängig von einem anderen Celleninhalt disablen AWT, Swing, JavaFX & SWT 1
J JavaFx TableView mit CheckBox AWT, Swing, JavaFX & SWT 4
karlmasutra Java FX Checkbox abfragen AWT, Swing, JavaFX & SWT 2
J SceneBuilder TableView Checkbox AWT, Swing, JavaFX & SWT 1
M JAVAFX Checkbox mit URL verlinkung AWT, Swing, JavaFX & SWT 4
A checkbox mit allen tabllen aus datenbank befüllen AWT, Swing, JavaFX & SWT 8
D JIDE TreeComboBox mit checkbox-en kombinieren AWT, Swing, JavaFX & SWT 2
K CheckBox Problem AWT, Swing, JavaFX & SWT 5
Developer_X Java JTable - Combobox + Checkbox - Cellrenderer + Editor AWT, Swing, JavaFX & SWT 3
F JTable mit Checkbox AWT, Swing, JavaFX & SWT 1
T SWT checkbox in table AWT, Swing, JavaFX & SWT 6
M JavaFX TableView mit CheckBox als Boolean AWT, Swing, JavaFX & SWT 5
Z DefaultTableModel + checkbox AWT, Swing, JavaFX & SWT 0
S Swing JTable zusätzliche Spalte mit einer Checkbox einfügen AWT, Swing, JavaFX & SWT 7
A JXTreeTable mit Checkbox AWT, Swing, JavaFX & SWT 2
P Listenelemente über Checkbox löschen AWT, Swing, JavaFX & SWT 6
D Checkbox - Datenbankausgeben AWT, Swing, JavaFX & SWT 31
A Swing JTable benutzt keine Checkbox für Booleans AWT, Swing, JavaFX & SWT 9
M Swing Dropbox / Checkbox in JTable AWT, Swing, JavaFX & SWT 3
D SWT CheckBox auslesen (Window Builder Pro) AWT, Swing, JavaFX & SWT 2
A Swing Bug in Swing? Wenn checkbox disabled reagiert ActionListener nicht AWT, Swing, JavaFX & SWT 5
T disabled Checkbox soll trotzdem Focus bekommen AWT, Swing, JavaFX & SWT 9
C Checkbox-zustände in einem JFrame speichern AWT, Swing, JavaFX & SWT 8
C SWT CheckBox AWT, Swing, JavaFX & SWT 6
B Swing DefaultTableModel, Checkbox in Spalte AWT, Swing, JavaFX & SWT 4
C Checkbox in Liste deaktivieren und paintComponent explizit aufrufen AWT, Swing, JavaFX & SWT 12
N JTable RadioButton statt Checkbox AWT, Swing, JavaFX & SWT 4
Semox Swing Random Checkbox JApplet AWT, Swing, JavaFX & SWT 14
S Checkbox AWT, Swing, JavaFX & SWT 4
Z AWT Auf bestimmte Checkbox einer Checkboxgroup zugreifen AWT, Swing, JavaFX & SWT 3
C jtable checkbox in header / spaltenüberschrift AWT, Swing, JavaFX & SWT 4
T Sprachumstellung per Checkbox, Konzeptfrage AWT, Swing, JavaFX & SWT 16
O CheckBox in Jtable - Listener darauf?? AWT, Swing, JavaFX & SWT 3
W ButtonGroup, Checkbox, A oder B oder gar nix AWT, Swing, JavaFX & SWT 3
G Checkbox AWT, Swing, JavaFX & SWT 7
A Checkbox-Choice Eventproblem (CMV) AWT, Swing, JavaFX & SWT 2
T Checkbox & Textfield AWT, Swing, JavaFX & SWT 5
S Checkbox oder String in JTable-Spalte AWT, Swing, JavaFX & SWT 4
G Checkbox, die eine Endlosschleife ausführt AWT, Swing, JavaFX & SWT 3
R CheckBox drücken, sodass eine Aktion ausgeführt wird AWT, Swing, JavaFX & SWT 5
F Häkchen erscheint nicht bei anklicken von Checkbox in JTable AWT, Swing, JavaFX & SWT 4
T Doppelte Abfrage eine Checkbox vermeiden AWT, Swing, JavaFX & SWT 2
F Checkbox transparent machen ? AWT, Swing, JavaFX & SWT 2
N TableModel mit CheckBox? AWT, Swing, JavaFX & SWT 5
D [JList]Checkbox einbinden ? AWT, Swing, JavaFX & SWT 3
L Checkbox in JTable (again), bei true Daten in Header AWT, Swing, JavaFX & SWT 7
F JTable mit Checkbox macht Probleme AWT, Swing, JavaFX & SWT 4
C Aktion nach Auswahl einer Checkbox AWT, Swing, JavaFX & SWT 6
W CheckBox in Jtree AWT, Swing, JavaFX & SWT 6
G Bild als Checkbox bzw gerasteten Button? AWT, Swing, JavaFX & SWT 3
J jTable + jTextarea & checkbox AWT, Swing, JavaFX & SWT 6
D CheckBox ändert Status nur, wenn sie FocusOwner ist AWT, Swing, JavaFX & SWT 2
C commando mit checkbox AWT, Swing, JavaFX & SWT 5
T selected checkbox AWT, Swing, JavaFX & SWT 2
T Checkbox AWT, Swing, JavaFX & SWT 10
N Checkbox mit mehreren Strings belegen? AWT, Swing, JavaFX & SWT 6
W Kleine Sub-Tabelle in SpreadsheetView-Zelle anzeigen AWT, Swing, JavaFX & SWT 9
K Tabelle zu Datenbank hinzufügen / Apache Derby AWT, Swing, JavaFX & SWT 7
izoards JavaFX editierbare Tabelle AWT, Swing, JavaFX & SWT 4
HoT Sortieren von ein paar Zeilen in einer Tabelle, aber nicht die ganze Tabelle AWT, Swing, JavaFX & SWT 3
H Tabelle in JFrame einfügen AWT, Swing, JavaFX & SWT 1
T Zelle- und die Zeile-Farbenwechsel bei der Selektion in der Tabelle AWT, Swing, JavaFX & SWT 4
T Anbinden der Tabelle an die Daten AWT, Swing, JavaFX & SWT 5
ralfb1105 JavaFX TreeView dynamisch aus Datenbank Tabelle erstellen AWT, Swing, JavaFX & SWT 22
F JavaFX Tabelle mit Daten füllen AWT, Swing, JavaFX & SWT 9
kodela Swing Letzte Änderung in der Tabelle wird nicht gespeichert AWT, Swing, JavaFX & SWT 5
W JavaFX Tabelle zeilenweise mit Werten füllen und an Container anpassen AWT, Swing, JavaFX & SWT 23
F JavaFX Tabelle mit gespeicherten Eingabe Werten AWT, Swing, JavaFX & SWT 8
adiko01 JTable: Nur markierte Zeilen aus der Tabelle in CSV exportiern AWT, Swing, JavaFX & SWT 9
B Zeile einer Tabelle selektieren AWT, Swing, JavaFX & SWT 1
A Swing Tabelle wird bei Betätigung des Button nicht befüllt AWT, Swing, JavaFX & SWT 17
L Dynamischer Aufbau einer Tabelle über Objekte AWT, Swing, JavaFX & SWT 2
B Swing Tabelle(JTable) filtern swing GUI AWT, Swing, JavaFX & SWT 3
D Swing JScrollPane Tabelle ändern (2 Tabellen) AWT, Swing, JavaFX & SWT 7
MrSnake Tabelle nach 2 Strings Filtern AWT, Swing, JavaFX & SWT 3
D Filter in Tabelle Sql AWT, Swing, JavaFX & SWT 6
M JavaFX Tabelle flexibler Länge AWT, Swing, JavaFX & SWT 3
T Swing Tabelle mit Button - Anzeigefehler nach Zeile entfernen AWT, Swing, JavaFX & SWT 1
JavaMachtMichFertig JavaFX Gui - Löschbutton in Tabelle anzeigen, die mittels MySQL Abfrage gefüllt wird AWT, Swing, JavaFX & SWT 5
D Swing Breite einer HTML Tabelle in einer JTextPane AWT, Swing, JavaFX & SWT 6
J JavaFX Tabelle soll ganze Seite ausfüllen AWT, Swing, JavaFX & SWT 2
M ausgewählte Inhalt von ListItem inn ComboBox in der Tabelle speichern AWT, Swing, JavaFX & SWT 0
D Swing Eigene Tabelle AWT, Swing, JavaFX & SWT 18
M Filter in die JFace/SWT Tabelle einbauen AWT, Swing, JavaFX & SWT 5
T SWT Mysql Tabelle zeigt immer nur den ersten Wert immer wieder an AWT, Swing, JavaFX & SWT 3
J JavaFX eine Art Tabelle, jedoch mit mehreren Zeilen AWT, Swing, JavaFX & SWT 2
P Swing Klick in Tabelle nicht möglich AWT, Swing, JavaFX & SWT 0
Thallius Swing Tabelle nach Datumsspalte sortieren AWT, Swing, JavaFX & SWT 4
F JavaFX Daten aus Tabelle in ComboBox AWT, Swing, JavaFX & SWT 9
E Tabelle zeigt nicht neuste Datenbankeinträge an AWT, Swing, JavaFX & SWT 5
F SWT Problem mit Tabelle und Combobox in einem Wizard AWT, Swing, JavaFX & SWT 5
D Swing JTable- Meine Tabelle der Klasse JTable wird nur bedingt angezeigt AWT, Swing, JavaFX & SWT 4
O Tabelle "animiert" Scrollen AWT, Swing, JavaFX & SWT 1
R Int aus JSpinner auslesen und Tabelle erstellen AWT, Swing, JavaFX & SWT 3
G JavaFX ComboBoxTableCell für Zuordnung in Tabelle AWT, Swing, JavaFX & SWT 2
B Probleme bei Sortierung einer Tabelle mit DefaultTableModel AWT, Swing, JavaFX & SWT 6
L Tabelle reagiert ungewollt auf Mausklick AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben