Hallo,
ich hab da eine Tabelle mit vier Spalten, in der letzten Spalte brauche ich (beim rendern der Zelle) den wert aus der 3. Spalte (derselben Zeile).
ich krieg einfach nicht raus, wie ich (listing Zeile 108) den float wert der vorherigen Zelle bekommen kann (und an x2 zuzuweisen).
Geht das? Wie?
Danke und Gruss,
der Flex
ich hab da eine Tabelle mit vier Spalten, in der letzten Spalte brauche ich (beim rendern der Zelle) den wert aus der 3. Spalte (derselben Zeile).
ich krieg einfach nicht raus, wie ich (listing Zeile 108) den float wert der vorherigen Zelle bekommen kann (und an x2 zuzuweisen).
Java:
import java.awt.*;
import java.util.Random;
import javax.swing.*;
import javax.swing.table.*;
import java.awt.Component;
import java.awt.Point;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
public class JTableDemo extends JFrame
{
static Color LiteBlue = new Color(238, 244, 255);
public static void main( String[] args ){
JTableDemo jtDemo = new JTableDemo ();
}
public JTableDemo()
{
// Ein TableModel mit zufälligen Werten füllen
TableModel model = randomModel();
// Die JTable initialisieren
JTable table = new JTable( model );
table.setDefaultRenderer( Object.class, new ColorRenderer());
table.setDefaultRenderer( Integer.class, new ColorRenderer());
table.setDefaultRenderer( Float.class, new ColorRenderer());
// table.setDefaultRenderer( Point.class, new PointRender());
JFrame frame = new JFrame( "Demo" );
frame.getContentPane().add( new JScrollPane( table ) );
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frame.pack();
frame.setVisible( true );
}
// Diese Methode generiert ein TableModel mit zufälligen Werten
private static TableModel randomModel(){
Object[] names = { "String", "Integer", "Float", "Point" };
DefaultTableModel dtmodel = new DefaultTableModel( names, 0 ) {
@Override
public Class<?> getColumnClass( int column ) {
switch( column ){
case 0: return String.class;
case 1: return Integer.class;
case 2: return Float.class;
case 3: return Point.class;
default: return Object.class;
}
}
};
Random random = new Random();
for( int i = 0; i < 22; i++ ){
Object[] row = {
randomString( random ),
randomInt( random ),
(float) (1+ i + i/24.0F),
new Point( randomInt( random ), randomInt( random ))
};
dtmodel.addRow( row );
}
return dtmodel;
}
// Generiert einen zufälligen String
private static String randomString( Random random ){
int length = random.nextInt( 4 ) + 4;
StringBuilder result = new StringBuilder( length );
for( int i = 0; i < length; i++ )
result.append( (char)('a' + random.nextInt( 'z' - 'a' + 1 )));
return result.toString();
}
// Generiert einen zufälligen int
private static int randomInt( Random random ){
return random.nextInt( 1000 ) + 1;
}
class ColorRenderer extends DefaultTableCellRenderer {
public Component getTableCellRendererComponent
(JTable table, Object value,
boolean isSelected,
boolean hasFocus,
int row, int column) {
super.getTableCellRendererComponent(table, value, isSelected,
hasFocus, row, column);
System.out.println(column+": "+value);
if (column == 0)
setHorizontalAlignment(CENTER);
if (row % 2 == 1)
setBackground(LiteBlue);
else
setBackground(Color.WHITE);
if (column == 3) {
float x2 = (float) table.getModel().getValueAt(row, 2);
}
return this;
}
}
// -----------------------------------------------------------------------------
//Ein Renderer für java.awt.Point
public class PointRender extends DefaultTableCellRenderer{
private static final long serialVersionUID = 1L;
@Override
public Component getTableCellRendererComponent( JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column ) {
Point point = (Point)value;
String text = point.x + " / " + point.y;
return super.getTableCellRendererComponent( table, text, isSelected,
hasFocus, row, column );
}
}
}
Geht das? Wie?
Danke und Gruss,
der Flex