java - 我想将数据表单元格背景从 sql 更改为 JTable Eclipse
问题描述
package Inventory;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import javax.swing.*;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumnModel;
import java.sql.*;
import java.util.Vector;
public class test {
public static void main(String[] args) {
Connection con = null;
Statement st = null;
ResultSet rs = null;
String s;
try {
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/dbInventory", "root", "");
st = con.createStatement();
s = "select * from stocks";
rs = st.executeQuery(s);
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);
}
JFrame frame = new JFrame();
frame.setSize(500, 280);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
JTable table = new JTable(data, column);
table.setDefaultEditor(Object.class, null);
table.setGridColor(Color.red);
JScrollPane jsp = new JScrollPane(table);
panel.setLayout(new BorderLayout());
panel.add(jsp, BorderLayout.CENTER);
frame.setContentPane(panel);
frame.setVisible(true);
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "ERROR");
} finally {
try {
st.close();
rs.close();
con.close();
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "ERROR CLOSE");
}
}
}
}
如果 QTUANTITY 低于 50,我想更改单元格颜色:
解决方案
您想要的是为您的JTable
列提供一个自定义表格单元格渲染器。这样,您可以定义每个单元格的呈现方式。
下面发布的最小示例执行以下操作:
JTable
使用一些虚拟数据构建。- 定义
class CustomColumnCellRenderer
哪些函数作为“数量”列的单元格渲染器。在那里,检查单元格值并相应地为单元格着色。 JTable
显示JScrollPane
在JFrame
. _
这是一个简短的演示:
import java.awt.Color;
import java.awt.Component;
import javax.swing.*;
import javax.swing.table.DefaultTableCellRenderer;
public class Test {
public static void main(String[] args) throws Exception {
SwingUtilities.invokeLater(() -> new Test().buildGui());
}
public void buildGui() {
JFrame frame = new JFrame();
Object[][] data = { { 10001, "Patties", 45 }, { 10002, "Burger Buns", 63 }, { 10003, "Bacon", 37 } };
String[] header = { "ITEM_CODE", "PRODUCT", "QUANTITY" };
JTable table = new JTable(data, header);
// set the custom renderer for "quantity" column
table.getColumnModel().getColumn(2).setCellRenderer(new CustomColumnCellRenderer());
JScrollPane scrollPane = new JScrollPane(table);
frame.add(scrollPane);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
class CustomColumnCellRenderer extends DefaultTableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row,
int col) {
// parse cell to JLabel for appropriate coloring
JLabel l = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col);
// parse the value to render to int for comparison
int parsedValue = Integer.parseInt(value.toString());
if (parsedValue < 50) {
l.setBackground(Color.RED);
} else {
l.setBackground(Color.GREEN);
}
// returns the JLabel to be rendered
return l;
}
}
}
结果:
推荐阅读
- c# - ASP.NET Core SignalR 从任何地方访问 Hub 方法
- flutter - Using GlobalMaterialLocalizations.delegate provides error
- web - 在云中使用密码验证运行静态网站
- vue.js - 当我的 vuex getter 在观察者中返回空值时,如何从状态中获取值
- python - 在 Pandas DataFrame 上使用 Python 中的 R lm 函数
- php - 如何处理大表上的左连接?有意想不到的行为
- java - 音频和文本文件上传
- math - 定向点(XYZ+Yaw/Pitch/Roll)帧到帧变换
- comments - Katalon Studio 中的彩色评论
- prestashop - 如何在管理产品页面中添加自定义输入字段