标签: tablecellrenderer

Swing:表格单元格渲染不适用于JXTable?

我试图根据某些行项的值覆盖JXTable的突出显示颜色.这是一个示例,如果行项值有高亮显示为绿色getNumber() % 2 == 0.

它适用于JTable,但对于JXTable,看起来表格单元格渲染器不起作用,除非选择了相关的行.为什么它会这样,我该如何解决?

在此输入图像描述 在此输入图像描述

import java.awt.Color;
import java.awt.Component;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumnModel;
import org.jdesktop.swingx.JXTable;
import ca.odell.glazedlists.BasicEventList;
import ca.odell.glazedlists.EventList;
import ca.odell.glazedlists.SortedList;
import ca.odell.glazedlists.gui.TableFormat;
import ca.odell.glazedlists.swing.EventTableModel;

public class TableRendererExample {
    static public enum ItemKey {
        NAME("name") {
            @Override public String getStringFromItem(Item item) {
                return item.getName();
            }
        }, 
        NUMBER("#") {
            @Override public String getStringFromItem(Item item) {
                return Integer.toString(item.getNumber());
            }
        }, 
        PARENT("parent") {
            @Override public String getStringFromItem(Item item) { …
Run Code Online (Sandbox Code Playgroud)

swing jxtable tablecellrenderer

6
推荐指数
1
解决办法
1761
查看次数

将多个JProgressBar添加到JTable的TableColumn

我已经加入多JProgressBarTableColumnJTable.

在进行某些计算后,我正在使用数据更新所有JProgressBar,但只有最后一个ProgressBar(在这种情况下ProgressBar progressObj4)添加的内容正在更新.

我怎样才能更新所有的ProgressBars?

基本要求是我在上传时显示文件进度条的状态.目前我正在硬编码4个进度条以测试所有进度条是否正在更新文件的状态,但我需要动态创建它们.进度条总数没有上传的文件数.另外,如何获取进度条的各个实例并更新其状态?

我附加了添加到表列的进度条的源代码.

//tc = object of TableColumn

progressObj1 = new ProgressBarRenderer("Progress1");
progressObj1.setValue(0);
progressObj1.setStringPainted(true);
progressObj1.setBackground(Color.WHITE);
progressObj1.setBorderPainted(true);

tc.setCellRenderer(progressObj1);

progressObj2 = new ProgressBarRenderer("Progress2");
progressObj2.setValue(0);
progressObj2.setStringPainted(true);
progressObj2.setBackground(Color.WHITE);
progressObj2.setBorderPainted(true);

tc.setCellRenderer(progressObj2);

progressObj3 = new ProgressBarRenderer("Progress3");
progressObj3.setValue(0);
progressObj3.setStringPainted(true);
progressObj3.setBackground(Color.WHITE);
progressObj3.setBorderPainted(true);

tc.setCellRenderer(progressObj3);

progressObj4 = new ProgressBarRenderer("Progress4");
progressObj4.setValue(0);
progressObj4.setStringPainted(true);
progressObj4.setBackground(Color.WHITE);
progressObj4.setBorderPainted(true);

tc.setCellRenderer(progressObj4);
Run Code Online (Sandbox Code Playgroud)

java swing jtable tablecellrenderer

6
推荐指数
1
解决办法
6327
查看次数

具有HTML字符串的表格单元格不一致地呈现为多行

我表中一列的单元格是HTML字符串.HTML用于提供一些颜色指示.通常,列的宽度足以包含整个字符串.但是当它还不够时,字符串很好地剪切在单词边界上.这是期望的行为.使用默认的单元格渲染器.

我注意到偶尔会有一些与表的交互触发渲染器包装字符串.据我了解,包裹HTML字符串是一种正常的行为JLabel从中DefaultTableCellRenderer派生.不清楚的是,为什么这种行为如此不一致以及是什么引发了它的偏差.跳来跳去的原因是什么JLabel,就像经常重新测量一样?有关示例,请参见附图.

为了解决这个问题,我可以添加<nobr>HTML字符串以防止换行,或者使用更复杂的渲染器来渲染彩色字符串.但我想知道是否有办法让JLabel游戏变得更好.

我设法将整个案例简化为一个简单的例子.我要重现的问题是单击各行以更改选择.

在此输入图像描述

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.util.Locale;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableModel;

public class TestTable extends JPanel{
    public TestTable() {
        setLayout(new BorderLayout());

        Object[][] rows = { 
                { "<html><font color=red>1 Lorem ipsum</font> dolor sit amet, " +
                        "consectetur adipiscing elit. In lectus dolor</html>"},
                { "<html><font color=green>2 Lorem ipsum</font> dolor sit amet, " +
                        "consectetur adipiscing elit. In lectus dolor</html>"}, …
Run Code Online (Sandbox Code Playgroud)

java swing jtable jlabel tablecellrenderer

6
推荐指数
1
解决办法
2384
查看次数

如何在Swing中的JTable列中添加不同的JComboBox项

我想在第1列的JTable(3,3)中添加JComboBox.但在第1列中,每行都有自己的ComboBox元素集.当我尝试使用时

table.getColumnModel().getColumn(1).setCellEditor(new DefaultCellEditor(comboBox_Custom));
Run Code Online (Sandbox Code Playgroud)

每行都被设置为同一组ComboBox值.但我希望每一行ComboBox都有不同的项目.

java swing jtable jcombobox tablecellrenderer

5
推荐指数
1
解决办法
7382
查看次数

减少getTableCellRendererComponent调用的数量

我正在使用一个实现TableCellRenderer的自定义单元格渲染器,并为每一行显示JTextArea(而不是JLabel).我基本上覆盖了我的getTableCellRendererComponent(...)方法,每行进行一些额外的计算.每个表更新只需执行一次这些计算.由于每次鼠标移动都会调用getTableCellRendererComponent方法,因此会发生滞后.所以我认为我应该阻止调用getTableCellRendererComponent以避免延迟.

注意事项:

1)我的表只有1列,没有标题.

2)我的数据是静态的,并通过实现AbstractTableModel的自定义tablemodel类中的getValueAt(int row,int column)方法从ArrayList读取.

3)我不需要观察鼠标运动事件.

4)我不期望有太多数据,所以我可能想要一次显示整个表或完全缓存它.

5)大多数滞后是由每次从getTableCellRendererComponent返回时设置文本引起的,因为有些行使用从右到左的字符,而RTL文本需要额外的时间来渲染.

java swing jtable tablecellrenderer

5
推荐指数
1
解决办法
604
查看次数

如何创建不同的JTable模型?

我想在我的系统上添加另一个设计/模型JTable.这是一个简单的设计,但对我来说(作为一个新手)我很难设置这种表.我希望表格看起来像这样: 桌面设计用粗体的最后一栏

是否有可能在Java中设计这样的表?请分享你有任何想法.

java swing jtable tablecellrenderer

5
推荐指数
2
解决办法
9716
查看次数

我想在JTable列中添加右填充,是否可能?

我想在JTable的列中添加正确的cell-padding,我该怎么办?

我尝试在线搜索,但似乎无法找到明确的答案.

我希望有一个人可以帮助我.

此致,乍得

java swing jtable tablecellrenderer

5
推荐指数
2
解决办法
1万
查看次数

仅对JTable中的特定单元进行着色

我正在寻找这个问题的解决方案:我有一个包含数据的excel文件.一些细胞具有黄色背景.我已经创建了一个代码,用于将文本导入JTable,工作正常.但我也想将背景单元格颜色导入特定单元格.为简单起见,这个例子,我没有使用循环,从源等读取excel数据.阅读论坛后我明白我需要CustomCellRenderer.

我有这个方法的问题,因为这个代码首先正确地着色列中的单元格,但是当我开始滚动此表中的彩色单元格时,它将整个列重新着色为黄色.(见截图)

我以为我可以添加else语句来专门将剩余的单元格着色为白色,但这种方法对我来说不起作用,因为我会覆盖以前的单元格结果.

你能指点我这个解决方案吗?(这是一个bug,还是JTable的预期行为?).我正在使用NetBeans和GUI拖放生成器

在此输入图像描述

import java.awt.Color;
import java.awt.Component;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;

public class MyRenderer extends DefaultTableCellRenderer {

    @Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);

        int[][] coordinatesYellow = new int[3][2];
        //[row][column] these cells are yellow
        coordinatesYellow[0][0] = 3;
        coordinatesYellow[0][1] = 2;
        coordinatesYellow[1][0] = 4;
        coordinatesYellow[1][1] = 2;
        coordinatesYellow[2][0] = 2;
        coordinatesYellow[2][1] = 2;

        for (int i = 0; i < 3; i++) …
Run Code Online (Sandbox Code Playgroud)

java jtable tablecellrenderer

5
推荐指数
1
解决办法
151
查看次数

JTable自定义单元格渲染器焦点问题

我有一张这样的桌子.第二列使用JTextField渲染器,第三列使用基于JPasswordField的渲染器和编辑器.

在此输入图像描述

看起来不错.但问题是我们必须输入值并且必须点击"ENTER".在该图像中,我输入了密码,但未按Enter键.因此,如果我单击"保存并关闭"按钮,它将显示密码字段为空的错误.

以前我在JTabbedPane下只使用了JTextFields和JPasswordFields,效果很好.当我不得不添加越来越多的东西时,我把它改成了这样的表格.

现在我已经贴了一个标签让人们知道他们应该点击进入..这不太好.另一个大问题.在Nimbus的Atleast外观和感觉,我们得知这个领域仍然是焦点.在Windows系统外观中,无论字段是否聚焦,都没有太多明显的区别.

在此输入图像描述

当我点击"保存并关闭"按钮时,我需要用户名字段或密码字段来设置它的值.请帮我.

java user-interface swing jtable tablecellrenderer

4
推荐指数
2
解决办法
1563
查看次数

jtable cellrenderer在运行时更改单元格的背景颜色

我正在尝试创建一个表格和颜色特定的单元格,黄色,红色或白色,具体取决于其他列的内容.为此,我循环填充值的行,然后检查内容.对于当前显示在屏幕上的每一行都可以正常工作,但是当程序到达未显示的行时,或者如果用户尝试滚动每个单元格,则将其背景颜色更改为白色.我在网上搜索了解决方案,唯一合理的想法是在每次循环后重置cellRenderer,这不起作用,因为它也会重置每个单元格.

我希望有人知道这方面的解决方案,或者可以让我知道我在哪里搞砸了什么.

我正在使用这个循环

for(int e = 0; e < modules.size(); e++)
    {
    gui.clearOutputStream();
    gui.getOutputStream().setText("Load Modul " + modules.get(e) + "\r\n");
    version = getVersion(modules.get(e));

    //Update current Row
    updateRow(gui.getReleaseTabelle(), e);
    }
Run Code Online (Sandbox Code Playgroud)

它调用这种方法

public void updateRow(JTable target, int row){
//...
//insert Values here
//...
CustomRenderer cr = new CustomRenderer();
        cr.tab = target;
        if(!target.getValueAt(row, 2).equals(target.getValueAt(row, 3)))
        {
            cr.Val1 = target.getValueAt(row, 1).toString();
            target.setValueAt("X", row, 1);
        }
        else if(!target.getValueAt(row, 7).equals(""))
        {
            cr.Val1 = target.getValueAt(row, 1).toString();
            target.setValueAt("Y", row, 1);
        }
        else
        {

        }
        target.getColumnModel().getColumn(1).setCellRenderer(cr);

}
Run Code Online (Sandbox Code Playgroud)

这是我的CustomRenderer

class …
Run Code Online (Sandbox Code Playgroud)

java swing jtable background-color tablecellrenderer

4
推荐指数
1
解决办法
2万
查看次数