我有一个AWT画布,我无法转换为Swing组件(它来自VTK).我希望在JSplitPane中显示一些这样的画布.我已经读过在Java中混合重量和重量轻的组件,并且知道这是一个痛苦的屁股,但我没有选择.如果我将AWT画布包装在JPanel中,然后将其放在拆分窗格上,则拆分窗格根本不起作用.但是,如果我将AWT画布放在JPanel中,然后放在JScrollPane内部,然后放在JSplitPane上的那些滚动窗格,则拆分窗格会起作用,但AWT画布组件不会正确调整大小.我失去了关于如何在移动JSplitPane的分隔符时使AWT画布组件正确调整大小.我可以捕捉分频器移动操作并在那时操作AWT画布,但我不知道该怎么做.我已经尝试调用invalidate()然后validate()然后重绘(),但这不起作用.
有任何想法吗?
这是问题的一个例子
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);
}
}