Tag: renderer

如何为JTree单元设置透明背景?

伙计们, 我正在尝试创建一个渐变JTree控件。 除了树单元格的背景不透明外,以下代码大部分都有效。 如果有人打电话告诉我,我做得不对,我将不胜感激。 预先感谢您的帮助。 问候, 彼得 package TestPackage; import javax.swing.*; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeCellRenderer; import java.awt.*; public class Test { public Test() { JFrame frame = new JFrame(); JPanel framePanel = new JPanel(); framePanel.setLayout(new BorderLayout()); frame.setContentPane(framePanel); DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode(“Item”); DefaultMutableTreeNode childNode = new DefaultMutableTreeNode(“Child”); rootNode.add(childNode); GradientTree tree = new GradientTree(rootNode); // JTree […]

如何将图像渲染到JTable单元格

我想在我的JTable的单元格上应用渲染器,为此我创建了一个名为myRenderer的类: import java.awt.Component; import javax.swing.ImageIcon; import javax.swing.JTable; import javax.swing.table.DefaultTableCellRenderer; public class MyRenderer extends DefaultTableCellRenderer { public Component getTableCellRendererComponent(JTable table, ImageIcon icon) { setIcon(icon); return this; } } 我使用这段代码在单元格上应用渲染器: MyRenderer renderer = new MyRenderer(); renderer.getTableCellRendererComponent(table, icon); table.getColumnModel().getColumn(6).setCellRenderer(renderer); 问题是,rebderer应用于第6列中的所有单元格,我希望它仅应用于一个单元格(行/列),但我不知道该怎么做? 提前致谢

动态更改JTree中特定节点的图标

我已经看到很多在树实例化期间更改节点图标的示例,但我想要一种方法可以在以后动态更改单个节点的图标。 所以,在我的主代码中,我将自定义渲染器添加到我的树中: // Icon I want to set nodes to later ImageIcon checkIcon = new ImageIcon(“check.jpg”); // Creates tree with my nodes JTree tree = new JTree(nodes.top); // Create custom renderer Scenario1Renderer renderer = new Scenario1Renderer(); // Set to single tree selection tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); // Set tree to my custom renderer //renderer.setRendererIcon(greenIcon); tree.setCellRenderer(renderer); 我在渲染器中的代码是 public class […]

难以理解swing的JTable和JTree的渲染器机制

通常,当使用JTable或JTree用户写入并分配时,它是自己的特定单元格渲染器。 从DefaultTableCellRendererinheritance用户的组件是很常见的,并实现了渲染器方法getTableCellRendererComponent 。 事实certificate, DefaultTableCellRenderer实际上是从JLabelinheritance的,因此当调用super(在render方法中)时返回自己(this),因此用户的渲染器也可以类似地返回自己(this)。 这一切都运作良好。 我的问题是它怎么样? 每次该表调用此方法时,都会为其指定不同的参数,并根据这些参数更改输出标签。 如果它确实是标签的同一个实例 – 不应该根据最后一次调用此方法进行更改吗? 是不是意味着所有表格的单元格都是由同一个标签实例组成的,该标签实例保持相同的值(最后一次调用渲染器方法的值)? 我在网上搜索,并在Swing的代码中挖掘,并且找不到任何实际复制输出标签的克隆或复制构造函数 。 我找不到任何证据表明(也许)swing使用reflection,以便每次从头开始重新实例化渲染器。 我已经阅读了关于JTables的Swing 教程,在那里我可以找到下一行: 您可能希望表中的每个单元格都是一个组件。 但是,出于性能原因,Swing表的实现方式不同。 相反,单个单元格渲染器通常用于绘制包含相同类型数据的所有单元格。 您可以将渲染器视为可配置的墨迹标记,该表用于将适当格式化的数据标记到每个单元格上。 当用户开始编辑单元格的数据时,单元格编辑器将接管单元格,从而控制单元格的编辑行为。 他们给出了一个暗示,我所说的确实是正确的,但不解释它是如何实现的。 我无法得到它。 可以吗?