当前位置: 代码迷 >> J2SE >> 怎么理解JAVA中的渲染器
  详细解决方案

怎么理解JAVA中的渲染器

热度:19   发布时间:2016-04-24 02:06:17.0
如何理解JAVA中的渲染器?
在给JTable添加button的时候,需要用到渲染器。看了资料,但还是不理解。所以哪位兄台能否相告。

------解决方案--------------------
Swing的每个控件基本上都有一个renderer和一个editer,当控件处于编辑状态时展现为一个editer,非编辑状态为一个renderer,通过renderer可以确定控件的展现比如说,控件的字体,颜色等等。
------解决方案--------------------
快快顶起!~~~
------解决方案--------------------
帮顶,也遇到这个问题啦
------解决方案--------------------
renderer 其实就是一个JComponent 准确的说默认的是一个JLabel 表格的渲染器 其实是画出来的 你想改变表格的单元格的显示方式可以自己写个renderer然后设置到表格上面去,或者你覆盖JTable的 public Component prepareRenderer(TableCellRenderer renderer,int row,int column)这个方法,看到这方法的返回类型了没 现在应该知道了吧
------解决方案--------------------
render: 渲染外观 
editor:内容编辑

TableCellRenderer
TableCellEditor
都是针对TableCell的

Java code
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>)
{
........
}
  相关解决方案