如何理解JAVA中的渲染器? 在给JTable添加button的时候,需要用到渲染器。看了资料,但还是不理解。所以哪位兄台能否相告。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 渲染器就是提供一种展现的方案。还有编辑器。简单来说,渲染器,是非编辑状态下所展现的。编辑器当然~~不用说了。这么说有些狭隘了。更多来说,可以针对每个数据来区分展现。就以你所说的JTable为例。可能一列中,有的要展现为字符串,有的是checkbox,而字符串细分,有的可能是数字,有的是文字。数字要居中,文字靠左。加入数字的展现再区分,大于100的绿色,等于100的蓝色;小于100的红色。渲染器,就是做这些的,更具不同的数据和条件展现不同的组件。 Swing的每个控件基本上都有一个renderer和一个editer,当控件处于编辑状态时展现为一个editer,非编辑状态为一个renderer,通过renderer可以确定控件的展现比如说,控件的字体,颜色等等。 j2se,多线程,socket网络,JBoss Netty研究群15161096欢迎加入! renderer 其实就是一个JComponent 准确的说默认的是一个JLabel 表格的渲染器 其实是画出来的 你想改变表格的单元格的显示方式可以自己写个renderer然后设置到表格上面去,或者你覆盖JTable的 public Component prepareRenderer(TableCellRenderer renderer,int row,int column)这个方法,看到这方法的返回类型了没 现在应该知道了吧 render: 渲染外观 editor:内容编辑TableCellRendererTableCellEditor都是针对TableCell的import java.awt.BorderLayout;import java.awt.Color;import java.awt.Component;import javax.swing.JFrame;import javax.swing.JScrollPane;import javax.swing.JTable;import javax.swing.table.DefaultTableCellRenderer;import javax.swing.table.TableCellRenderer;class EvenOddRenderer implements TableCellRenderer { public static final DefaultTableCellRenderer DEFAULT_RENDERER = new DefaultTableCellRenderer(); public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { Component renderer = DEFAULT_RENDERER.getTableCellRendererComponent( table, value, isSelected, hasFocus, row, column); Color foreground, background; if (isSelected) { foreground = Color.YELLOW; background = Color.GREEN; } else { if (row % 2 == 0) { foreground = Color.BLUE; background = Color.WHITE; } else { foreground = Color.WHITE; background = Color.BLUE; } } renderer.setForeground(foreground); renderer.setBackground(background); return renderer; }}public class ResizeTable { public static void main(String args[]) { final Object rowData[][] = { { "1", "one", "I" }, { "2", "two", "II" }, { "3", "three", "III" } }; final String columnNames[] = { "#", "English", "Roman" }; final JTable table = new JTable(rowData, columnNames); JScrollPane scrollPane = new JScrollPane(table); table.setDefaultRenderer(Object.class, new EvenOddRenderer()); JFrame frame = new JFrame("Resizing Table"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add(scrollPane, BorderLayout.CENTER); frame.setSize(300, 150); frame.setVisible(true); }} 渲染器: 比如说一个Grid 中的,我要渲染Grid 中的ROW信息1。给Grid 一个Model 2。写个类实现Grid 以前渲染Row中的接口3。进行渲染原理是: 通过Model 中的每一条数据进行的处理,其中Model 就是一个List<T> 要渲染每次取一个T; 与这个差不多: for(T t :List<T>){ ........} table.setDefaultRenderer(Object.class, new EvenOddRenderer());其实我就是这句不明白............................... 用editplus写的java程序如何打包成安装程序? 关于垃圾回收的一个题目 正则表达式匹配一个整数值 java 中 Database问题 在java中如何以二进制的形式打开文档,并依次读取字节?!!!! 关于键盘事件的问题 请大家帮帮忙..... 怎么实现 自动提示栏,像JBuilder和Vc那样的 天那!!都两天了,快来帮帮我呀! 程序通过jdbc,使用system用户登录oracle数据库失败。 怎么在JTextArea中在不同的时间输出不同的内容 #@@线程问题,大家看看,高分
还有编辑器。简单来说,渲染器,是非编辑状态下所展现的。编辑器当然~~不用说了。
这么说有些狭隘了。
更多来说,可以针对每个数据来区分展现。就以你所说的JTable为例。可能一列中,有的要展现为字符串,有的是checkbox,而字符串细分,有的可能是数字,有的是文字。数字要居中,文字靠左。加入数字的展现再区分,大于100的绿色,等于100的蓝色;小于100的红色。渲染器,就是做这些的,更具不同的数据和条件展现不同的组件。
欢迎加入!
editor:内容编辑TableCellRenderer
TableCellEditor
都是针对TableCell的
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;class EvenOddRenderer implements TableCellRenderer { public static final DefaultTableCellRenderer DEFAULT_RENDERER = new DefaultTableCellRenderer(); public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
Component renderer = DEFAULT_RENDERER.getTableCellRendererComponent(
table, value, isSelected, hasFocus, row, column);
Color foreground, background;
if (isSelected) {
foreground = Color.YELLOW;
background = Color.GREEN;
} else {
if (row % 2 == 0) {
foreground = Color.BLUE;
background = Color.WHITE;
} else {
foreground = Color.WHITE;
background = Color.BLUE;
}
}
renderer.setForeground(foreground);
renderer.setBackground(background);
return renderer;
}
}public class ResizeTable {
public static void main(String args[]) { final Object rowData[][] = { { "1", "one", "I" }, { "2", "two", "II" },
{ "3", "three", "III" } };
final String columnNames[] = { "#", "English", "Roman" }; final JTable table = new JTable(rowData, columnNames);
JScrollPane scrollPane = new JScrollPane(table); table.setDefaultRenderer(Object.class, new EvenOddRenderer()); JFrame frame = new JFrame("Resizing Table");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add(scrollPane, BorderLayout.CENTER); frame.setSize(300, 150);
frame.setVisible(true); }
}
比如说一个Grid 中的,我要渲染Grid 中的ROW信息
1。给Grid 一个Model
2。写个类实现Grid 以前渲染Row中的接口
3。进行渲染
原理是:
通过Model 中的每一条数据进行的处理,其中Model 就是一个List<T>
要渲染每次取一个T;
与这个差不多:
for(T t :List<T>)
{
........
}