簡體   English   中英

JTable很慢

[英]JTable very slow

我在swing應用程序中有一個JTable。 我編寫了一個快速而骯臟的停靠操作,其中JTable從其默認父對象中移除,並被添加到單獨的JFrame中。 當JTable取消對接並放置在單獨的JPane上時,在JTable中移動的速度確實非常慢...一旦我將其停靠回其原始位置,它又恢復了正常工作...以下是用於Undocker ..有什么想法嗎? 謝謝

JTABLE UNDOCKER

 public class MatrixWindowUndocker implements ActionListener{ private static final Logger logger = Logger.getLogger( MatrixWindowUndocker.class.getName()); MatrixVerifier mv; public MatrixWindowUndocker(MatrixVerifier mv) { this.mv = mv; } public void actionPerformed(ActionEvent e) { undockMatrixPanel(mv); } private static void undockMatrixPanel(MatrixVerifier mv) { JFrame undockedFrame = mv.undockedWindowFrame; undockedFrame.setDefaultCloseOperation( WindowConstants.DO_NOTHING_ON_CLOSE); locateFrame(undockedFrame); 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 static void locateFrame(JFrame frame) { GraphicsConfiguration gc = null; GraphicsDevice[] gds = GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices(); logger.debug("gds.length: " + gds.length); if (gds != null && gds.length > 1) { gc = gds[1].getDefaultConfiguration(); } else { gc = gds[0].getDefaultConfiguration(); } frame.setLocation(10 + gc.getBounds().x, 10 + gc.getBounds().y); } 

}

JTABLE DOCKER

public class MatrixWindowDocker implements ActionListener {

 MatrixVerifier mv; public void setMv(MatrixVerifier mv) { this.mv = mv; } public MatrixWindowDocker(MatrixVerifier mv) { this.mv = mv; } /** * Main action method. * @param e */ public void actionPerformed(ActionEvent e) { dockMatrixPanel(mv); } private static void dockMatrixPanel(MatrixVerifier mv) { if (mv.undockedFrame != null) { mv.undockedFrame.dispose(); mv.pdfAndMetadata_JPanel.setAlignmentX(0.8F); mv.pdfAndMetadata_JPanel.setMinimumSize(new 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天。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM