我有一个无法转换为 Swing 组件的 AWT 画布(它来自VTK)。我希望在 JSplitPane 中显示其中一些画布。我已经阅读了有关在 Java 中混合重型和轻型组件的文章,并且知道这很麻烦,但我别无选择。如果我将 AWT 画布包装在 JPanel 内,然后将其放在拆分窗格上,则拆分窗格根本不起作用。但是,如果我将 AWT 画布放在 JPanel 内,然后将其放在 JScrollPane 内,然后 JSplitPane 上的那些滚动窗格,拆分窗格确实起作用,但 AWT 画布组件无法正确调整大小。当 JSplitPane 的分隔线被移动时,我不知道如何让 AWT 画布组件正确调整大小。当时我可以捕捉分隔线移动操作并在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);
}
}