У меня есть холст AWT, который я не могу преобразовать в компонент Swing (он получен из VTK ).Я хочу показать некоторые из этих полотен внутри JSplitPane.Я читал о смешивании тяжелых и легких компонентов в Java и знаю, что это неприятно, но у меня нет выбора.Если я оберну холст AWT внутри JPanel, а затем положу его на разделенную панель, разделенная панель вообще не будет работать.Однако, если я помещаю холст AWT внутри JPanel, а затем в JScrollPane, а затем на эти панели прокрутки на JSplitPane, работает разделенная панель, но компоненты холста AWT не меняются должным образом.Я заблудился о том, как правильно изменить размеры компонентов холста AWT при перемещении разделителя JSplitPane.Я могу уловить операцию перемещения делителя и работать на полотнах AWT в то время, но я не знаю, что делать.Я пытался вызвать invalidate (), затем validate (), затем repaint (), но это не сработало.
Есть идеи?
Вот пример проблемы
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);
}
}