У меня есть AWT-холст, который я не могу преобразовать в компонент Swing (он исходит от VTK). Я хочу отобразить некоторые из этих полотен внутри JSplitPane. Я читал о смешивании тяжелых и легких компонентов на Java и знаю, что это боль в заднице, но у меня нет выбора. Если я обернуваю холст AWT внутри JPanel, а затем поставлю его на панель разделения, панель разделения вообще не работает. Однако, если я поместил AWT-холст внутри JPanel, а затем внутри JScrollPane, а затем эти панели прокрутки на JSplitPane, панель разделения работает, но компоненты холста AWT не изменяются правильно. Я потерял информацию о том, как заставить компоненты холста AWT правильно изменять размер, когда разделитель JSplitPane перемещается. Я могу поймать операцию перемещения делителя и работать на холстах AWT в то время, но я не знаю, что делать. Я попытался вызвать invalidate(), затем validate(), а затем repaint(), но это не сработало.Использование 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? –
я. Теперь это исправлено. – Jon
Возможно, SSCCE (http://sscce.org) поможет нам увидеть проблему. Вы можете создать собственный собственный холст, не используя VTK, чтобы продемонстрировать проблему. Вы также можете перейти на JDK 1.6.17 (?) Или JDK 1.7, который теперь поддерживает смешивание компонентов AWT. – camickr