Probleme mit JTable

Status
Nicht offen für weitere Antworten.

deusful

Mitglied
Ich will eine Tabelle ine einem Applet implementieren und habe mehrere kleine Probleme:
1. Voran liegt es, das keine Tabellen überschriften ausgegeben werden (die Tabellendaten hingegen schon)?
Code:
String[][] data = new String[][]{
            {"1",  "(500,800]", "6", " ", " "},
            {"2", "(800,1100]", "13", " ", " "},
            {"3", "(1100,1400]", "22", " ", " "},
            {"4", "(1400,1700]", "32", " ", " "},
            {"5", "(1700,2000]", "40", " ", " "},
            {"6", "(2000,2300]", "42", " ", " "},
            {"7", "(2300,2600]", "39", " ", " "},
            {"8", "(2600,2900]", "31", " ", " "},
            {"9", "(2900,3200]", "20", " ", " "},
            {"10","(3200,3500]", "5", " ", " "}
      };

      // Die Column-Titles
      String[] title = new String[]{
            "A", "B", "C", "D", "E"
      };

  JTable table1 = new JTable(data,title);

2. Gibt es eine Möglichket die Zelleneinträge auszurichten(rechts, center, links)?

3. Ich möchte die Spaltenbreite der Tabelle festlegen. Allerdings bekomme ich eine Fehlermeldung bezüglich der Dekleration der Variable columnModel.
Code:
table1.setAutoResizeMode(JTable.AUTO_RESIZE_OFF );
    
TableColumnModel columnModel = table1.getColumnModel();

    columnModel.getColumn(0).setPreferredWidth( 20 );
    columnModel.getColumn( 1 ).setPreferredWidth( 50 );
    columnModel.getColumn( 2 ).setPreferredWidth( 80 );
    columnModel.getColumn( 3 ).setPreferredWidth( 110 );

4. Ich möchte das der Benutzer die ersten vier Spalten nicht verändern kann. Gibts dafür eine Möglichkeit.

5. Ich möchte in Abhängigkeit von AKtionen die Hintergrundfarben der Zellen verändern können. Auch hier wäre ich für einen Tipp dankbar!
 
Ok, hatte mich teilweise schon mit der seite auseinandergesetzt.
Zu 1: Das habe ich komplett von der seite übernommen und es funzt trotzdem nicht. die überschriften werden nicht übernommen.
Zu 2: Da habe ich leider nichts zu gefunden.
Zu 3: import hat gefehlt!
Zu 4: da hab ich auch nichts gefunden!
Zu 5: ich hab mir die ganze sache angeschaut, kann dem ganzen leider nicht so richtig folgen. muss ich die werte und farben jeweils in einem model hinterlegen und dieses dann der tabelle übergeben???
Wäre nett, wenn mir vielleicht jemand ein kleines beispiel posten (vielleicht mit einer zeile, inder jede zelle eine andere hintergrundfarbe hat!)

Danke, das wäre nett.
 
Was grün ist, ist editierbar, der Rest nicht.
(Zeilen links/rechts kannst du auch im Renderer umschalten).

Code:
import java.awt.Color;
import java.awt.Component;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;

public class Main{
   public static void main( String[] args ){
      // Die Daten für das Table
      String[][] data = new String[][]{
            {"a", "b", "c", "d"},
            {"e", "f", "g", "h"},
            {"i", "j", "k", "l"}
      };
      
      // Die Column-Titles
      String[] title = new String[]{
            "A", "B", "C", "D"
      };
      
      TableModel model = new DefaultTableModel( data, title ){
		public boolean isCellEditable( int row, int column ) {
			return (row + column) % 2 == 0;
		}
      };
      
      // Das JTable initialisieren
      JTable table = new JTable();
      table.setModel( model );
      table.setDefaultRenderer(  Object.class, new Renderer());
      
      JFrame frame = new JFrame( "Demo" );
      frame.getContentPane().add( new JScrollPane( table ) );
      frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
      frame.pack();
      frame.setVisible( true );
   }
}

class Renderer extends DefaultTableCellRenderer{
	/* (non-Javadoc)
	 * @see javax.swing.table.DefaultTableCellRenderer#getTableCellRendererComponent(javax.swing.JTable, java.lang.Object, boolean, boolean, int, int)
	 */
	public Component getTableCellRendererComponent( JTable table, Object value,
			boolean isSelected, boolean hasFocus, int row, int column ) {
		
		super.getTableCellRendererComponent( table, value, isSelected,
				hasFocus, row, column );
		
		if( table.getModel().isCellEditable( row, column ))
			setBackground( Color.GREEN );
		else
			setBackground( Color.RED );
		
		return this;
	}
}
 
Hallo deusful. Ist zwar schon lange her, aber hast Du eine Antwort auf Deine 2. Frage bekommen oder konntest Du sie mittlerweile selber beantworten. Wäre super wenn Du mir das mitteilen könntest.

mfg
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben