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
 
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
 
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)
 
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"}};
    }
}
 
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 ...
 
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
 
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.

Zurück
Oben