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);
}
}