我提供了一些示例代碼着色行
import java.awt.Color;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
public class TestTable extends javax.swing.JFrame
{
private JButton jButton1;
private JScrollPane jScrollPane1;
private JTable jTable1;
public TestTable()
{
initComponents();
}
private void initComponents(){
///////////////////////////////////////////////
//Initializing components
jScrollPane1 = new javax.swing.JScrollPane();
jTable1 = new javax.swing.JTable();
jButton1 = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
String data[][] = { {"A","B","C"},
{"R","S","T"},
{"U","V","W"}
};
String col[] = {"X","Y","Z"};
jTable1 = new JTable(new DefaultTableModel(data, col));
jScrollPane1.setViewportView(jTable1);
jButton1.setText("jButton1");
///////////////////////////////////////////////
//positioning button and table
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap(15, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 375, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap())
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addComponent(jButton1)
.addGap(160, 160, 160))))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 117, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(47, 47, 47)
.addComponent(jButton1)
.addContainerGap(102, Short.MAX_VALUE))
);
///////////////////////////////////////////////
//create event callback for the button
jButton1.setText("Change data & color");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
///////////////////////////////////////////////
pack();
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
//change the data in the table
String data[][] = { {"a","b","c"},
{"r","s","t"},
{"u","v","w"} };
String col[] = {"x","y","z"};
DefaultTableModel model= new DefaultTableModel(data,col);
jTable1.setModel(model);
//change the header in the table
jTable1.getTableHeader().setBackground(Color.red);
// IS IT POSSIBLE TO INSERT CODE HERE, WITHOUT REINITIALIZING jTable1,
// SO THAT CLICKING THE BUTTON WILL TURN THE MIDDLE ROW GREEN?
//change button text
jButton1.setText("Changed");
}
public static void main(String[] args)
{
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new TestTable().setVisible(true);
}
});
}
}
我已經能夠改變,當我在主運行TestTable的行的顏色澄清我剛纔的問題,但我在更改回調中的行顏色時遇到問題(如上所述)。我的猜測是,插入代碼像
jTable1.getCellRenderer(0, 0).getTableCellRendererComponent(jTable1, String.class, false,false, 0,0).setBackground(Color.green);
因爲我在此代碼指定表的條目(0,0),我希望這個代碼會變成條目(0,0),但是,這種轉整桌綠色!請注意,我可以更改模型中的數據和標題的顏色,而不會有任何問題。
任何幫助真誠讚賞。 感謝 克里斯
喜行,我很清楚自己的第一點 - 你能解釋一下請給我? - 我正在使用jTable1.setModel(newModel)更新我的方法中的表模型。你說渲染器必須添加到新的JTable中,但是這不是我們想要避免的(即新的JTable)嗎?我也很困惑,因爲在句子的第一部分,你說不要創建一個新的JTable。我想從我的菜單回調中更改jTable1中不同行的背景顏色。謝謝 – 2012-08-07 15:56:08
JTable,它的Model和prepareRenderer應該創建一次,只有 – mKorbel 2012-08-07 16:09:57