[英]change color of Jtable cell based on resultset value from msyql
我使用 Netbeans 開發一個 java 應用程序,我有一個來自 MYSQL 數據庫的結果集,我想把這些數據放在一個 JTable 中。 當我想根據值更改 JTable 單元格的背景顏色時遇到問題(例如:如果 Jtable 中單元格的值不等於 1,則其顏色必須為紅色)。 這是我的代碼:
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
/**
*
*
*/
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import java.sql.*;
import java.util.Vector;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
public class Cell2 {
// JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost/db";
// Database credentials
static final String USER = "root";
static final String PASS = "(abdc)";
public void queryABTS(JTable table) {
Connection conn = null;
Statement stmt = null;
try {
//STEP 2: Register JDBC driver
Class.forName("com.mysql.jdbc.Driver");
//STEP 3: Open a connection
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL, USER, PASS);
//STEP 4: Execute a query
System.out.println("Creating statement...");
stmt = conn.createStatement();
String sql;
sql = "SELECT * from dbn;";
ResultSet rs = stmt.executeQuery(sql);
ResultSetMetaData rsmt = rs.getMetaData();
int c = rsmt.getColumnCount();
Vector column = new Vector(c);
for (int i = 1; i <= c; i++) {
column.add(rsmt.getColumnName(i));
}
Vector data = new Vector();
Vector row = new Vector();
while (rs.next()) {
row = new Vector(c);
for (int i = 1; i <= c; i++) {
row.add(rs.getString(i));
}
data.add(row);
}
table.setModel(new javax.swing.table.DefaultTableModel(data, column));
table.getTableHeader().setFont(new Font("SansSerif", Font.BOLD, 13));
// table.getValueAt(1, 1);
TableColumn column1 = null;
for (int i = 0; i < 5; i++) {
column1 = table.getColumnModel().getColumn(i);
if (i == 3) {
column1.setPreferredWidth(150); //third column is bigger
} else {
column1.setPreferredWidth(50);
}
}
setCellRenderer(table);
//color cell =======================================================================
// end color cell ==================================================================
//========================================================
//=======================================================
//STEP 6: Clean-up environment
rs.close();
stmt.close();
conn.close();
} catch (SQLException se) {
//Handle errors for JDBC
se.printStackTrace();
} catch (Exception e) {
//Handle errors for Class.forName
e.printStackTrace();
} finally {
//finally block used to close resources
try {
if (stmt != null) {
stmt.close();
}
} catch (SQLException se2) {
}// nothing we can do
try {
if (conn != null) {
conn.close();
}
} catch (SQLException se) {
se.printStackTrace();
}//end finally try
}//end try
System.out.println("Goodbye!");
}//end main
public static TableCellRenderer createCellRenderer() {
return new DefaultTableCellRenderer() {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
if (column == 4 && "1".equals((String) value)) {
c.setBackground(Color.RED);
}
return c;
}
};
}
public static void setCellRenderer(JTable table) {
TableCellRenderer cellRenderer = createCellRenderer();
table.setDefaultRenderer(Object.class, cellRenderer);
}
}
嘗試這個
public static TableCellRenderer createCellRenderer() {
return new DefaultTableCellRenderer() {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
c.setBackground(Color.GREEN);
return c;
}
};
}
public static void setCellRenderer(JTable table) {
TableCellRenderer cellRenderer = createCellRenderer();
table.setDefaultRenderer(Object.class, cellRenderer);
}
通過調用table.setModel(new javax.swing.table.DefaultTableModel(data, column));
您正在將數據放入表模型中。 JTable
默認使用DefaultTableCellRenderer
實例來渲染單元格,可以通過調用table.setDefaultRenderer(Integer.class, cellRenderer)
將其替換為您自己的單元格渲染器 - 這會將自定義 cellrenderer 設置為所有Integer
列( DefaultTableModel
使用Object
列)。 顯示表格時,表格的每個單元格都由表格的cellrenderer 的getTableCellRendererComponent(...)
方法自定義。 在此方法中,您擁有當前組件(單元格)及其值和位置(請參閱參數),您可以使用它們在渲染之前自定義單元格。
因此,如果您想將第二列中值為 1 的每個單元格的背景顏色設置為紅色,您可以這樣寫:
if (column == 1 && ((Integer) value) == 1) {
c.setBackground(Color.RED);
}
將表的data
傳遞給單元格渲染器
public static TableCellRenderer createCellRenderer(final Vector data) {
return new DefaultTableCellRenderer() {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
// use data to customize current component
return c;
}
};
}
public static void setCellRenderer(JTable table, Vector data) {
// Vector data = ((DefaultTableModel) table.getModel()).getDataVector();
TableCellRenderer cellRenderer = createCellRenderer(data);
table.setDefaultRenderer(Object.class, cellRenderer);
}
public class Product extends javax.swing.JPanel {
public Product() {
initComponents();
getNewRenderedTable(p_table);
}
private static JTable getNewRenderedTable(final JTable table){
table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer(){
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column){
super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
int status = Integer.parseInt((String) table.getModel().getValueAt(row, 7));
if(status<=5){
setBackground(Color.red);
setForeground(Color.WHITE);
}
else{
setBackground(Color.WHITE);
setForeground(Color.black);
}
return this;
}
});
return table;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.