JTable очень медленно - PullRequest
1 голос
/ 11 августа 2010

У меня есть JTable в приложении Swing. Я написал быструю и грязную операцию снятия с док-станции, в которой JTable удаляется из родительского элемента по умолчанию и добавляется в отдельный JFrame. Когда JTable отстыкован и помещен в отдельный JPane, он ДЕЙСТВИТЕЛЬНО медленно перемещается в JTable ... как только я возвращаю его обратно в исходное положение, он снова начинает работать нормально ... расстегнуть .. есть идеи? спасибо

JTABLE UNDOCKER

</p> <pre><code>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 {</p> <pre><code>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); } }

}

1 Ответ

1 голос
/ 11 августа 2010

Существует элементарный профилировщик, включенный в JDK из JDK 1.6, который называется jvisualvm. Вы можете попробовать использовать его, чтобы увидеть, что происходит. Еще лучше будет настоящий профилировщик, но единственные хорошие - платные, хотя у некоторых есть 30-дневные бесплатные пробные версии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...