29. december 2005 - 22:22
Der er
1 kommentar
Hvordan ændre jeg farven på et tal i min JTable?
Jeg har søgt alle vejene, i tutorials osv. men kan ikke finde ud af hvordan jeg for et tal i et bestemt felt i min JTable til at blive rødt? - ved du mon det? God Jul:)
29. december 2005 - 23:51
#1
Der er mange muligheder, her er eksempler på 2 af dem
I den første celle kan du skrive en tekst og rette farven til rød
I kolonne 2 bliver positive tal skrevet med sort og negative tal med rød farve
Prøv selv.
import java.awt.Color;
import java.awt.Component;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
public class TableFontColor extends javax.swing.JFrame {
public TableFontColor() {
initComponents();
TableColumn col = table.getColumnModel().getColumn(1);
col.setCellRenderer(new MyCellRenderer());
}
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
jButton1 = new javax.swing.JButton();
scroll = new javax.swing.JScrollPane();
table = new javax.swing.JTable();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jButton1.setText("Skift fontfarve i celle 1");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
skiftFarve(evt);
}
});
jPanel1.add(jButton1);
getContentPane().add(jPanel1, java.awt.BorderLayout.NORTH);
scroll.setPreferredSize(new java.awt.Dimension(452, 200));
table.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null}
},
new String [] {
"Title 1", "Title 2", "Title 3", "Title 4"
}
) {
Class[] types = new Class [] {
java.lang.Object.class, java.lang.Integer.class, java.lang.Object.class, java.lang.Object.class
};
public Class getColumnClass(int columnIndex) {
return types [columnIndex];
}
});
scroll.setViewportView(table);
getContentPane().add(scroll, java.awt.BorderLayout.CENTER);
pack();
}
private void skiftFarve(java.awt.event.ActionEvent evt) {
DefaultTableCellRenderer dtc = (DefaultTableCellRenderer)table.getCellRenderer(0,0);
dtc.setForeground(Color.red);
table.repaint();
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new TableFontColor().setVisible(true);
}
});
}
private javax.swing.JButton jButton1;
private javax.swing.JPanel jPanel1;
private javax.swing.JScrollPane scroll;
private javax.swing.JTable table;
}
class MyCellRenderer extends JLabel implements TableCellRenderer{
public MyCellRenderer(){
setOpaque(true);
}
public Component getTableCellRendererComponent(JTable table,
Object value,
boolean isSelected,
boolean hasFocus,
int row,
int column) {
setHorizontalAlignment(JLabel.RIGHT);
if(value == null)
setText("");
else
setText(value.toString());
if(value instanceof Integer){
int i = ((Integer)value).intValue();
if(i < 0)
setForeground(Color.red);
else
setForeground(Color.black);
}
if(isSelected)
setBackground(table.getSelectionBackground());
else
setBackground(table.getBackground());
return this;
}
}