我在 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/