java - JTable 不呈现

标签 java swing jtable japplet

当加载带有小程序的页面时,JTable 对象的内容将完美呈现。当我关闭选项卡并重新打开它时,会呈现在开始时设置的内容,但是当我通过 setValeAt() 更改内容时表变空。当我从数据模型中删除所有 html 标签时,一切正常。我对表的默认渲染器不执行任何操作,仅实现数据模型。所有值均通过 setValeAt() 设置它有效(我检查过)。 有人知道可能出了什么问题吗?

这是重现错误的示例代码。运行小程序(值将发生变化),然后关闭选项卡(不是浏览器)并重新打开它。我在 Linux 和 Windows XP 上的 Firefox 3.6.13 和 Java 1.6.0_22-b04 中测试了它。它的作用是一样的。

import javax.swing.JApplet;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;

public class test extends JApplet 
{
    class model extends AbstractTableModel
    {

        @Override
        public int getColumnCount() 
        {
            return 3;
        }

        @Override
        public int getRowCount() 
        {
            return 3;
        }

        @Override
        public Object getValueAt(int arg0, int arg1) 
        {
            return "<html><b>" + Math.random() + "</b></html>"; // does not work
            //return "" +  Math.random(); // work
        }

        public void setValueAt(Object newValue, int row, int col)
        {
            fireTableCellUpdated(row, col );
        }
    }

    JTable t = new JTable();

    public void init()
    {
        t.setModel( new model() );
        add( t );
    }

    public void start()
    {
        new Thread( new Runnable() 
        {

            @Override
            public void run() 
            {
                int i=0;
                try 
                {
                    while( ++i<100 )
                    {
                        Thread.sleep(100); // thanks to camickr
                        t.setValueAt(Void.class, (int)(Math.random()*10) %3, (int)(Math.random()*10) %3 );
                    }

                }
                catch (InterruptedException e) 
                {
                    e.printStackTrace();
                }
            }
        }).start();
    }
}

编辑:

index.html内的HTML小程序代码

<applet width="500px" height="500px" alt="test test test" code="test.class">
</applet>

编译代码: javac test.java

产生:文件test$1.class test.class test$model.class

第一次运行正常。创建新选项卡,然后关闭小程序选项卡。重新打开小程序选项卡(不要关闭浏览器)并且表格内容不会呈现。

编辑2
这是一个 JVM 错误!请参阅http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6995386和其他相关的。它仅影响 JRE 1.6.0_22

最佳答案

我无法在 XP 上使用 JDK6_7 重现该问题。

values will be changing

这些值不会不断变化,因为每次更新模型后您都不会 sleep 。我稍微改变了代码:

// Thread.sleep(100);

while( ++i<100 )
{
    t.setValueAt(Void.class, (int)(Math.random()*10) %3, (int)(Math.random()*10) %3 );
    Thread.sleep(500);
}

关于java - JTable 不呈现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4994473/

相关文章:

java - RxJava 中的单线程 ExecutorService 相当于什么?

Java:显示消息对话框 10 秒然后删除?

java - AWT Canvas 在手动调整大小时闪烁

java - JTable - 复合编辑器焦点

java - SQLite数据库什么时候创建的?

java - 我有一个 ListView 。如何将 ListView 的点击总数保存到另一个 Activity TextView ?

java - 是否有支持 SQL 语法的 Swing 组件?

java - JScrollPane 达到滚动限制事件

java - jTable,覆盖的DefaultCellRenderer在排序后不会重绘图标

java - 为什么 Java 正则表达式在 Linux 和 Windows 上的行为不同?