java - JTable 非常慢

标签 java user-interface swing jtable

我在 swing 应用程序中有一个 JTable。我编写了一个快速但肮脏的取消停靠操作,其中 JTable 从其默认父级中删除,并添加到单独的 JFrame 中。当 JTable 脱离并放置在单独的 JPane 上时,它在 JTable 中移动真的很慢...一旦我将其放回到原来的位置,它又恢复正常工作...下面是 undocker 的代码.. 有任何想法吗? 谢谢

JTABLE UNDOCKER

公共(public)类 MatrixWindowUndocker 实现 ActionListener{

私有(private)静态最终 Logger 记录器 = Logger.getLogger(
        MatrixWindowUndocker.class.getName());
矩阵 validator  mv;

公共(public) MatrixWindowUndocker(MatrixVerifier mv)
{
    这个.mv = mv;
}

公共(public)无效actionPerformed(ActionEvent e)
{
    取消停靠MatrixPanel(mv);
}

私有(private)静态无效 undockMatrixPanel(MatrixVerifier mv)
{
    JFrame undockedFrame = mv.undockedWindowFrame;

    undockedFrame.setDefaultCloseOperation(
            WindowConstants.DO_NOTHING_ON_CLOSE);

    定位帧(取消停靠帧);

    mv.mainMatrixTablePanel.remove(mv.mainMatrixTableScrollPane);
    undockedFrame.setLayout(new BorderLayout());
    undockedFrame.add(mv.mainMatrixTableScrollPane);
    mv.pdfAndMetadata_JPanel.remove(mv.table_pdf_splitter);
    mv.pdfAndMetadata_JPanel.add(mv.pdfDrawCanvasPanel);
    mv.pack();
    mv.setExtendedState(JFrame.MAXIMIZED_BOTH);
    undockedFrame.pack();
    undockedFrame.setExtendedState(JFrame.MAXIMIZED_BOTH);
    mv.undockedFrame = undockedFrame;
    undockedFrame.setVisible(true);
}

私有(private)静态无效locateFrame(JFrame框架)
{
    GraphicsConfiguration gc = null;
    GraphicsDevice[] gds = GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices();
    logger.debug("gds.length: "+ gds.length);

    if (gds != null && gds.length > 1)
    {
        gc = gds[1].getDefaultConfiguration();
    }
    别的
    {
        gc = gds[0].getDefaultConfiguration();
    }
    frame.setLocation(10 + gc.getBounds().x, 10 + gc.getBounds().y);
}

}

JTABLE Docker

公共(public)类 MatrixWindowDocker 实现 ActionListener {

MatrixVerifier mv;

公共(public)无效setMv(MatrixVerifier mv)
{
    这个.mv = mv;
}

公共(public) MatrixWindowDocker(MatrixVerifier mv)
{
    这个.mv = mv;
}

/**
 * 主要 Action 方法。
 * @参数e
 */
公共(public)无效actionPerformed(ActionEvent e)
{
    停靠矩阵面板(mv);
}

私有(private)静态无效dockMatrixPanel(MatrixVerifier mv)
{
    if (mv.undockedFrame != null)
    {
        mv.undockedFrame.dispose();

        mv.pdfAndMetadata_JPanel.setAlignmentX(0.8F);
        mv.pdfAndMetadata_JPanel.setMinimumSize(新 java.awt.Dimension(550,
                0));
        mv.pdfAndMetadata_JPanel.setPreferredSize(new java.awt.Dimension(800,
                0));
        mv.pdfAndMetadata_JPanel.setLayout(new java.awt.BorderLayout());

        mv.table_pdf_splitter.setDividerLocation(.60);
        mv.table_pdf_splitter.setDividerSize(2);
        mv.table_pdf_splitter.setResizeWeight(0.3);
        mv.table_pdf_splitter.setDividerLocation(0.50);

        mv.pdfAndMetadata_JPanel.add(mv.table_pdf_splitter,
                java.awt.BorderLayout.CENTER);

        mv.table_pdf_splitter.setLeftComponent(mv.pdfDrawCanvasPanel);

        mv.mainMatrixTablePanel.setLayout(new java.awt.BorderLayout());
        mv.mainMatrixTableScrollPane.setViewportView(mv.metadataTable_JTable);

        mv.mainMatrixTablePanel.add(mv.mainMatrixTableScrollPane,
                java.awt.BorderLayout.CENTER);
        mv.table_pdf_splitter.setRightComponent(mv.mainMatrixTablePanel);
    }
}

}

最佳答案

从 JDK 1.6 开始,JDK 中就包含了一个基本的分析器,我认为它称为 jvisualvm。您可以尝试使用它来看看发生了什么。更好的是真正的分析器,但唯一好的是付费的,尽管有些有 30 天的免费试用期。

关于java - JTable 非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3461243/

相关文章:

java - 如何在 Java 中向文本字段添加 Action 监听器

java - 支持包的用途是什么(例如它与 util 有何不同)?

java - Android Studio 中的 Java 随机数

java - 将过滤器引入 App Engine 应用程序的正确方法是什么?

php - 如何在多个表中添加/编辑/管理相关数据

Android sendevent 真的很慢 - 如何加快速度?

java - 使用 Java Access Bridge 实现自动化

java - 如何将鼠标点击结果发送到另一个jFrame'?

java - 在通用 Java 类中扩展可比较、可克隆的问题?

java - SWT:定期更新GUI