java JTable怎么设置每个网格颜色

Eleven_git 2012-02-24 04:17:02
java JTable怎么设置每个网格颜色 做了一个酒店管理系统 每一个网格都代表一个房间 当点击某个房间后 设置该网格颜色为XX,并获取该网格所代表的房间号~~现在就差填入数据了
谢谢 各位大牛
...全文
686 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eleven_git 2012-02-28
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 eleven_git 的回复:]
好吧 大概是我表达有问题 我就是想问怎么监听点击了某个表格?注意是某个!不是某行或某列!如果能监听某个表格,那么怎么获得代表该表格的参数?(比如 以后可以将这个参数传入别的方法中来识别点击的这一格)
[/Quote]也就是说怎么监听表格中的每一格?点击后得到这一格的参数 传入别的方法中来设置这一格的变化
Eleven_git 2012-02-28
  • 打赏
  • 举报
回复
好吧 大概是我表达有问题 我就是想问怎么监听点击了某个表格?注意是某个!不是某行或某列!如果能监听某个表格,那么怎么获得代表该表格的参数?(比如 以后可以将这个参数传入别的方法中来识别点击的这一格)
  • 打赏
  • 举报
回复
Swing支持html的
在JTable单元格内写HTML改变背景颜色
例如设置字体颜色是:
<html><font color='red'>红色</font></html>
diandimei 2012-02-27
  • 打赏
  • 举报
回复
百度搜【JTable 操作单元格 行 列】,这是我自己搞出来的,呵呵
Eleven_git 2012-02-27
  • 打赏
  • 举报
回复
你这一段代码我看得懂 但是我想问的主要是 你的isSelected在哪里设为True?初始肯定是false 。在监听里设为true么?但是我查API了 没有单个表格的监听!只有:

public interface ListSelectionListenerextends EventListener列表选择值发生更改时收到通知的侦听器。

另请参见:
ListSelectionModel

public interface TableModelListenerextends EventListenerTableModelListener 定义侦听 TableModel 中更改的对象的接口。

另请参见:
TableModel

但是我试过这俩个了,没用啊 有这个的例子么? 主要是监听然后获得所点击表格 更改颜色 遍历那些我会。
feifeikub 2012-02-27
  • 打赏
  • 举报
回复
这段代码可以实现,你自己根据需要改点东西,就是当点击了哪个单元格后,那个单元格就变色,其它的不变色,下面代码很容易看懂的,结贴吧!

public class TrafficInfoTable extends JTable {
static class TrafficInfoTableCellRenderer extends DefaultTableCellRendere..
// static final Color RED = new Color(240, 0, 0);
static final Color YELLOW = new Color(255, 255, 204);
static final Color BLUE = new Color(195, 217, 255);
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row,
int column) {
// TODO Auto-generated method stub
Color foreground, background;
if (isSelected) {
foreground = Color.black;
background = BLUE;
} else {
if (row % 2 == 0) {
foreground = Color.BLACK;
background = YELLOW;
} else {
foreground = Color.BLACK;
background = Color.WHITE;
}
}
Eleven_git 2012-02-27
  • 打赏
  • 举报
回复
http://image.baidu.com/i?ct=503316480&z=0&tn=baiduimagedetail&word=%BE%C6%B5%EA%B9%DC%C0%ED%CF%B5%CD%B3&in=1498&cl=2&lm=-1&st=-1&pn=12&rn=1&di=44718588675&ln=1962&fr=&fm=index&fmq=1330324203621_R&ic=&s=0&se=&sme=0&tab=&width=&height=&face=&is=&istype=2#pn13&-1&di83760022800&objURLhttp%3A%2F%2Fwww.lllufh.com%2Fupimages%2F2007-11%2F2007112538641737.JPG&fromURLhttp%3A%2F%2Fwww.lllufh.com%2Fsoftware%2Fcatalog24%2F149.html&W1024&H768&T8697&S132&TPjpg
Eleven_git 2012-02-27
  • 打赏
  • 举报
回复
这是每一行和隔列颜色不一样吧? 我想的是点击某一格 这一格的颜色改变 但是其他格不变下面是我在网上找的一个例子:

feifeikub 2012-02-27
  • 打赏
  • 举报
回复

package com.jctest.color;

import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;



import java.util.Enumeration;

import javax.swing.JTable;
import javax.swing.RowSorter;
import javax.swing.table.DefaultTableCellRenderer;

import javax.swing.table.JTableHeader;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;

/**
* 本类实现了对JTable颜色的控制,提供了两套方案:
* 1.实现了表格行两种颜色交替的效果
* 2.实现了用一个控制颜色的字符串数组来设置所对应行的颜色
* 本文件与PlanetTable.java文件相配合使用
* @author Sidney
* @version 1.0 (2008-1-14)
*/
public class StyleTable extends JTable
{
private String[] color = null; //用于设定行颜色的数组

public StyleTable()
{
super();
}

public StyleTable(Object[][] rowData, Object[] columnNames)
{
super(rowData, columnNames);
paintRow(); //将奇偶行分别设置为不同颜色

//setFixColumnWidth(this); //固定表格的列宽

//通过点击表头来排序列中数据resort data by clicking table header
RowSorter<TableModel> sorter = new TableRowSorter<TableModel>(this.getModel());
this.setRowSorter(sorter);

this.setIntercellSpacing(new Dimension(5,5)); //设置数据与单元格边框的眉边距

//根据单元内的数据内容自动调整列宽resize column width accordng to content of cell automatically
fitTableColumns(this);
}

public StyleTable(Object[][] rowData, Object[] columnNames, String[] color)
{
super(rowData, columnNames);
this.color = color;
paintColorRow();

setFixColumnWidth(this);

RowSorter<TableModel> sorter = new TableRowSorter<TableModel>(this.getModel());
this.setRowSorter(sorter);

this.setIntercellSpacing(new Dimension(5,5));

fitTableColumns(this);
}

/**
* 根据color数组中相应字符串所表示的颜色来设置某行的颜色,注意,JTable中可以对列进行整体操作
* 而无法对行进行整体操作,故设置行颜色实际上是逐列地设置该行所有单元格的颜色。
*/
public void paintRow()
{
TableColumnModel tcm = this.getColumnModel();
for (int i = 0, n = tcm.getColumnCount(); i < n; i++)
{
TableColumn tc = tcm.getColumn(i);
tc.setCellRenderer(new RowRenderer());
}
}

public void paintColorRow()
{
TableColumnModel tcm = this.getColumnModel();
for (int i = 0, n = tcm.getColumnCount(); i < n; i++)
{
TableColumn tc = tcm.getColumn(i);
tc.setCellRenderer(new RowColorRenderer());
}
}

/**
* 将列设置为固定宽度。//fix table column width
*
*/
public void setFixColumnWidth(JTable table)
{
//this.setRowHeight(30);
this.setAutoResizeMode(table.AUTO_RESIZE_OFF);
/**/
//The following code can be used to fix table column width
TableColumnModel tcm = table.getTableHeader().getColumnModel();
for (int i = 0; i < tcm.getColumnCount(); i++)
{
TableColumn tc = tcm.getColumn(i);
tc.setPreferredWidth(50);
// tc.setMinWidth(100);
tc.setMaxWidth(50);
}
}

/**
* 根据数据内容自动调整列宽。//resize column width automatically
*
*/
public void fitTableColumns(JTable myTable)
{
myTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
JTableHeader header = myTable.getTableHeader();
int rowCount = myTable.getRowCount();
Enumeration columns = myTable.getColumnModel().getColumns();
while(columns.hasMoreElements())
{
TableColumn column = (TableColumn)columns.nextElement();
int col = header.getColumnModel().getColumnIndex(column.getIdentifier());
int width = (int)header.getDefaultRenderer().getTableCellRendererComponent
(myTable, column.getIdentifier(), false, false, -1, col).getPreferredSize().getWidth();
for(int row = 0; row < rowCount; row++)
{
int preferedWidth = (int)myTable.getCellRenderer(row, col).getTableCellRendererComponent
(myTable, myTable.getValueAt(row, col), false, false, row, col).getPreferredSize().getWidth();
width = Math.max(width, preferedWidth);
}
header.setResizingColumn(column); // 此行很重要
column.setWidth(width+myTable.getIntercellSpacing().width);
}
}

/**
* 定义内部类,用于控制单元格颜色,每两行颜色相间,本类中定义为蓝色和绿色。
*
* @author Sidney
*
*/
private class RowRenderer extends DefaultTableCellRenderer
{
public Component getTableCellRendererComponent(JTable t, Object value,
boolean isSelected, boolean hasFocus, int row, int column)
{
//设置奇偶行的背景色,可在此根据需要进行修改
if (row % 2 == 0)
setBackground(Color.BLUE);
else
setBackground(Color.GREEN);

return super.getTableCellRendererComponent(t, value, isSelected,
hasFocus, row, column);
}
}

/**
* 定义内部类,可根据一个指定字符串数组来设置对应行的背景色
*
* @author Sidney
*
*/
private class RowColorRenderer extends DefaultTableCellRenderer
{
public Component getTableCellRendererComponent(JTable t, Object value,
boolean isSelected, boolean hasFocus, int row, int column)
{
//分支判断条件可根据需要进行修改
if (color[row].trim().equals("E"))
{
setBackground(Color.RED);
}
else if (color[row].trim().equals("H"))
{
setBackground(Color.CYAN);
}
else if (color[row].trim().equals("A"))
{
setBackground(Color.BLUE);
}
else if (color[row].trim().equals("F"))
{
setBackground(Color.ORANGE);
}
else
{
setBackground(Color.WHITE);
}

return super.getTableCellRendererComponent(t, value, isSelected,
hasFocus, row, column);
}
}
}




测试类


package com.jctest.color;

//(2)PlanetTable.java文件用于利用上面的实现展示功能。

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
//
//
//
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;


/**
* 本类为JTable一个简单应用,实现了JTable的行颜色设置及表格的打印功能
* 本文件与StyleTable.java文件相配合使用
*/
public class PlanetTable
{
public static void main(String[] args)
{
JFrame frame = new PlanetTableFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}

class PlanetTableFrame extends JFrame
{
private Object[][] cells = {
{ "Mercury", new Double(2440.0), new Integer(0),
new Boolean(false), Color.yellow },
{ "Venus", new Double(60520.0), new Integer(0), new Boolean(false),
Color.yellow },
{ "Earth", new Double(6378.0), new Integer(1), new Boolean(false),
Color.blue },
{ "Mars", new Double(3397.0), new Integer(2), new Boolean(false),
Color.red },
{ "Jupiter", new Double(71492.0), new Integer(16),
new Boolean(false), Color.orange } };

private String[] columnNames = { "Planet", "Radius", "Moons", "Gaseous",
"Color" };
//
private static final int DEFAULT_WIDTH = 400;
private static final int DEFAULT_HEIGHT = 200;

public PlanetTableFrame()
{
// 用于控制每一行颜色的数组
String[] color = { "H", "A", "F", "E", "W" };

setTitle("PlanetTable");
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
// 定义JTable,实例成自己扩展的JTable类,并传入用于设定颜色的数组
//final JTable table = new StyleTable(cells, columnNames, color);
// 下面这行代码可实现相邻两行颜色交替的效果,注意与上一行的区别
final JTable table = new StyleTable(cells, columnNames);
add(new JScrollPane(table), BorderLayout.CENTER);

JButton printButton = new JButton("Print");
printButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event)
{
try {
table.print();
} catch (java.awt.print.PrinterException e) {
e.printStackTrace();
}
}
});
JPanel buttonPanel = new JPanel();
buttonPanel.add(printButton);
add(buttonPanel, BorderLayout.SOUTH);
}
}
Eleven_git 2012-02-27
  • 打赏
  • 举报
回复
就是说插入数据用遍历 那么改变某一个表格的颜色呢?
feifeikub 2012-02-24
  • 打赏
  • 举报
回复
for循环数据用DefaultTableModel装放到JTabel中。
Eleven_git 2012-02-24
  • 打赏
  • 举报
回复
哦 对了 还有个问题 怎么给JTable遍历填入数据,以前JSP是遍历就可以了 但是JTable第一次用 怎么才能遍历到对应的表格中呢?
内容概要:本文深入探讨了DMA高效数据传输实现方案在高性能计算芯片领域的应用与架构创新,重点分析了缓存一致性DMA、多通道DMA架构及其在数据中心SmartNIC、存算一体芯片和Chiplet互连等场景中的实践。文章结合RISC-V架构,通过Chisel硬件描述语言和C语言驱动代码,展示了多通道DMA控制器的设计与实现,涵盖仲裁机制、AXI总线适配、分散-聚集传输模式及中断处理等核心技术,并强调了性能优化与验证方法。最后展望了AI调度、光互连、近存计算与安全DMA等未来发展方向。; 适合人群:具备数字电路与计算机体系结构基础,从事芯片设计、嵌入式开发或高性能计算相关工作的研发人员,尤其是有1-5年经验的工程师与研究人员。; 使用场景及目标:①理解DMA在突破“内存墙”和降低系统能耗中的关键技术路径;②掌握多通道DMA控制器的硬件设计与驱动开发方法;③应用于SmartNIC、AI加速器、Chiplet等高性能芯片系统的数据传输架构设计;④为构建高带宽、低延迟、高能效的异构计算平台提供参考。; 阅读建议:此资源融合硬件设计与软件驱动,建议结合Chisel仿真与RISC-V平台实操,重点关注DMA与缓存一致性、异构计算单元的协同机制,并通过性能计数器与错误注入手段进行系统级验证。
内容概要:本文围绕基于共享储能服务的智能楼宇双层优化配置展开研究,通过Matlab代码实现相应的数学建模与仿真分析,提出一种结合上层规划与下层运行的协同优化框架,旨在提升智能楼宇能源系统的经济性、能效水平与电网互动能力。研究充分考虑光伏发电、负荷需求、储能充放电等多元因素,采用先进的优化算法(如智能优化算法)对共享储能资源的容量配置与运行调度进行精细化决策,有效降低用能成本,提高可再生能源消纳率,并增强系统运行的稳定性与灵活性。全文涵盖模型构建、算法设计、求解流程及结果验证,具备较高的理论深度与工程应用价值; 适合人群:具备电力系统、能源管理、优化算法等相关背景的科研人员、研究生,以及从事智能电网、综合能源系统、建筑节能等领域的工程技术人员; 使用场景及目标:①用于智能楼宇及园区级能源系统的规划与运行优化研究;②支撑共享储能机制下的资源配置、经济调度与商业模式设计;③作为Matlab仿真教学与高水平论文复现的典型案例,帮助深入理解双层优化模型、主从博弈结构及智能算法在能源系统中的应用; 阅读建议:建议结合提供的Matlab代码进行同步学习与调试,重点关注上下层模型的耦合关系与迭代求解过程,可进一步拓展至多主体协同、不确定性建模(如风光出力波动)及鲁棒优化等前沿方向开展深化研究。
内容概要:本文《【故障检测】基于 KPCA 的故障检测【T2 和 Q 统计指数的可视化】(Matlab代码实现)》系统阐述了基于核主成分分析(KPCA)的非线性故障检测方法,重点实现了T²和Q统计量的构建与可视化过程。通过Matlab编程,将高维非线性数据映射至特征空间,提取主成分并建立监控模型,利用T²和Q指数对工业过程中的异常状态进行联合监测与诊断,有效提升了复杂系统中早期故障的识别能力,具有较强的工程实用性与理论参考价值。; 适合人群:适用于具备信号处理、控制工程或工业过程监测背景,熟悉Matlab编程语言,并从事故障诊断、智能运维、自动化系统研发等相关工作的研究生、科研人员及工程技术开发者。; 使用场景及目标:①应用于化工、电力、制造等流程工业中的关键设备状态监控与早期故障预警;②作为学术研究中KPCA算法的仿真验证平台,用于对比分析不同非线性降维方法的检测性能;③深化对非线性过程监控中统计指标设计与阈值判定机制的理解与实践应用。; 阅读建议:建议读者结合所提供的Matlab代码逐模块运行与调试,深入掌握KPCA建模流程、主成分子空间划分及T²、Q统计量的计算逻辑,鼓励在标准数据集(如TE过程)上复现实验结果,并尝试扩展至其他非线性场景以提升模型泛化能力。

62,622

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧