我使用Netbean开发一个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 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;
}
}
试试这个
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);
}
通过调用表。setModel(新的javax.swing.table.DefaultTableModel(数据,列))
您正在将数据放入表模型中
JTable
默认情况下使用DefaultTableCellRenderer
实例渲染单元格,可以通过调用table由您自己的单元格渲染器替换。setDefaultRenderer(Integer.class,cellRenderer)
-这将把自定义cellRenderer设置为所有Integer
列(DefaultTableModel
使用对象
列)。显示表格时,表格的每个单元格都由GetTableCellRenderComponent(…)自定义
方法。在这种方法中,您可以使用当前组件(单元)及其值和位置(请参见参数),在渲染之前可以使用这些组件自定义单元。
因此,如果要将第二列中每个单元格的背景色设置为红色,且值为1,则可以编写:
if (column == 1 && ((Integer) value) == 1) {
c.setBackground(Color.RED);
}
将表的
数据
传递到单元格渲染器
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);
}
问题内容: 我想制作一个可编辑的表,然后检查数据以确保其有效。我不确定如何仅更改一个单元格的颜色。我想要一个单元格,例如(0,0)并将前景颜色设置为红色。我已经阅读了SO和Oracle上有关自定义ColorRenderer的其他文章,但是我不知道如何使用它。 谢谢。 问题答案: 假设您要用其他颜色渲染的单元格代表一种状态(我将以“拒绝并批准”为例)。然后,我将在我的表模型中实现一个名为getSta
问题内容: 我试图使自己熟悉JTables,TableModels,JTableHeaders,渲染器等。我试图制作一个简单的虚拟表(出于练习目的),看起来像这样: 我还希望B2单元格-并且只有该单元格-具有蓝色(Color.BLUE)背景-所有其他单元格都可以具有自动分配的Swing默认颜色。 我的代码在下面,并且基于我在本网站和整个互联网上发现的无数示例。但是我没有得到想要的结果。相反,我得到
我有一个jtable保存账本文件记录并将它们发送出去。
在开始之前,我查看了一些解决方案和文档。我似乎不明白为什么我的代码没有按我认为应该的方式工作。我已经扩展了DefaultTableCellRenderer,但我不相信它正在被应用——否则我就把事情搞砸了。 以下是我在发布此问题之前查看过的帖子/网站: Swing-是否可以在JTable单元格中设置特定文本的字体颜色? JTable细胞渲染器 http://docs.oracle.com/javas
您好,我是java jtable的新手。我正在寻找一种在我的程序中有效的方法,但我没有找到它的任何运气。这是我的Jtable 数据来自ms Access数据库,但我想改变状态列中值为“非活动”的行的背景/前景。我在网上找到了很多例子,但所有的例子在我的程序中都是不可能的。有人能帮帮我吗?这是我的模特 这是创建我的表的方法,以及我如何从数据库中获取数据 我该如何添加以这种方式重新绘制的表格?有人能举
问题内容: 我在GUI应用程序中使用JTable作为网格来表示游戏的位置。我希望代表对象某个位置的表的单元格具有某种颜色,并且在某些操作上希望移动的对象(即在Grid / JTable中四处移动的颜色单元格)。我知道我可以通过创建一个可扩展的类来更改单元格的颜色,这是唯一的方法吗?还是有一种更简单的方法来改变单元格颜色?对于这样的应用程序,JXTable是否比JTable好? 编辑: 我没有包括以