我有一個AWT畫布,我無法將其轉換爲Swing組件(它來自VTK)。我希望在JSplitPane中顯示一些這些畫布。我讀過關於在Java中混合重量和輕量級組件的知識,並且知道這是一個令人頭疼的問題,但我沒有選擇。如果我將AWT畫布包裝在JPanel中,然後將它放在分割窗格上,那麼分割窗格根本不起作用。但是,如果我將AWT畫布放在JPanel內部,然後放入JScrollPane內部,然後將JSplitPane上的那些滾動窗格放在分割窗格中,但AWT畫布組件不能正確調整大小。我迷失了關於如何在JSplitPane的分隔符被移動時讓AWT畫布組件正確調整大小。我可以在那個時候捕捉分隔線移動操作並在AWT畫布上操作,但我不知道該怎麼做。我試着調用invalidate()然後驗證()然後重繪(),但沒有奏效。將JSplitPane與AWT組件一起使用
任何想法?
這裏的問題
import javax.swing.*;
import java.awt.*;
public class SwingAWTError {
public static void main(String[] args) {
Canvas leftCanvas = new Canvas();
Canvas rightCanvas = new Canvas();
leftCanvas.setBackground(Color.RED);
rightCanvas.setBackground(Color.BLUE);
JPanel leftPanel = new JPanel();
JPanel rightPanel = new JPanel();
leftPanel.setLayout(new BorderLayout());
rightPanel.setLayout(new BorderLayout());
leftPanel.add(leftCanvas, BorderLayout.CENTER);
rightPanel.add(rightCanvas, BorderLayout.CENTER);
JScrollPane leftScroll = new JScrollPane();
JScrollPane rightScroll = new JScrollPane();
leftScroll.getViewport().add(leftPanel);
rightScroll.getViewport().add(rightPanel);
JSplitPane split = new JSplitPane();
split.setLeftComponent(leftScroll);
split.setRightComponent(rightScroll);
split.setDividerLocation(400);
JFrame frame = new JFrame();
frame.getContentPane().setLayout(new BorderLayout());
frame.getContentPane().add(split, BorderLayout.CENTER);
frame.setSize(800, 800);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
你的意思是JScrollPane而不是JScrollBar? – 2010-10-22 17:54:41
我願意。現在已修好。 – Jon 2010-10-22 17:59:58
也許SSCCE(http://sscce.org)會幫助我們看到問題。您可以創建一個簡單的Canvas,而無需使用VTK來展示問題。您也可以升級到現在支持混合AWT組件的JDK 1.6.17(?)或JDK 1.7。 – camickr 2010-10-22 21:32:14