Problèmes de redimensionnement avec le canevas intégré dans l'éditeur d'interface graphique NetBeans
Lors de la création d'une application avec un JSplitPane, contenant un canevas dans un JScrollPane en haut composant, les utilisateurs peuvent rencontrer des problèmes de redimensionnement. Lorsque vous poussez le séparateur vers le haut, le séparateur a tendance à disparaître sous le canevas.
Divers ajustements des tailles préférées, minimales et maximales du JScrollPane et du Canvas se sont révélés inefficaces pour résoudre ce problème. Voici un aperçu plus approfondi du code pertinent généré par NetBeans :
jSplitPane1 = new javax.swing.JSplitPane(); jScrollPane1 = new javax.swing.JScrollPane(); canvas1 = new java.awt.Canvas(); jTextField1 = new javax.swing.JTextField(); jSplitPane1.setDividerLocation(300); jSplitPane1.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT); jScrollPane1.setViewportView(canvas1); jSplitPane1.setTopComponent(jScrollPane1); jTextField1.setText("jTextField1"); jSplitPane1.setRightComponent(jTextField1);
Le coupable réside dans l'utilisation de setPreferredSize() pour le composant Canvas. En définissant une taille fixe, le Canvas devient rigide et restreint les capacités de redimensionnement du JScrollPane environnant.
Une solution à ce problème consiste à supprimer la taille fixe et à laisser le Canvas calculer dynamiquement sa taille préférée. Ceci peut être réalisé en utilisant pack() sur la fenêtre englobante pour s'adapter aux changements de taille dynamiques.
Voici un exemple qui résout le problème de redimensionnement :
import draw.GraphPanel; import java.awt.EventQueue; import java.awt.GridLayout; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JSplitPane; /** * @see https://stackoverflow.com/q/11942961/230513 */ public class SplitGraph extends JPanel { public SplitGraph() { super(new GridLayout()); JSplitPane split = new JSplitPane(JSplitPane.VERTICAL_SPLIT); GraphPanel graphPanel = new GraphPanel(); split.setTopComponent(new JScrollPane(graphPanel)); split.setBottomComponent(graphPanel.getControlPanel()); this.add(split); } private void display() { JFrame f = new JFrame("SplitGraph"); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.add(this); f.pack(); f.setLocationRelativeTo(null); f.setVisible(true); } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { new SplitGraph().display(); } }); } }
Dans cet exemple, le préféré La taille du GraphPanel est calculée dynamiquement et s'ajuste de manière appropriée lorsque le diviseur est déplacé. Cela permet une expérience de redimensionnement transparente sans aucun problème de séparation.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!