J'ai un canevas AWT que je ne peux pas convertir en composant Swing (il provient de VTK). Je souhaite afficher quelques-unes de ces toiles à l'intérieur d'un JSplitPane. J'ai lu sur le mélange de composants lourds et légers en Java et je sais que c'est une douleur dans la crosse, mais je n'ai pas le choix. Si j'emballe le canevas AWT à l'intérieur d'un JPanel et le place ensuite sur le volet fractionné, le volet fractionné ne fonctionne pas du tout. Toutefois, si je place le canevas AWT à l'intérieur d'un JPanel, puis à l'intérieur d'un JScrollPane, puis les volets de défilement sur le JSplitPane, le volet fractionné fonctionne, mais les canevas AWT ne sont pas redimensionnés correctement. Je suis perdu sur comment obtenir les composants de canevas AWT à redimensionner correctement lorsque le diviseur de JSplitPane est déplacé. Je peux attraper l'opération de déplacement de diviseur et opérer sur les toiles AWT à ce moment-là, mais je ne sais pas quoi faire. J'ai essayé d'appeler invalidate() puis validate() puis repaint(), mais cela n'a pas fonctionné.Utilisation de JSplitPane avec un composant AWT
Des idées?
Voici un exemple du problème
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);
}
}
Voulez-vous dire JScrollPane plutôt que JScrollBar? –
Je fais. C'est maintenant réparé. – Jon
Peut-être un SSCCE (http://sscce.org) nous aidera à voir le problème. Vous pouvez créer votre propre Canvas sans utiliser VTK pour démontrer le problème. Vous pouvez également effectuer une mise à niveau vers JDK 1.6.17 (?) Ou JDK 1.7, qui prend désormais en charge le mélange des composants AWT. – camickr