Probleme bei der Größenänderung des eingebetteten Canvas im NetBeans-GUI-Editor
Beim Erstellen einer Anwendung mit einem JSplitPane, das oben einen Canvas in einem JScrollPane enthält Bei der Verwendung einer Komponente kann es bei Benutzern zu Problemen bei der Größenänderung kommen. Wenn Sie den Teiler nach oben schieben, verschwindet er tendenziell unter der Leinwand.
Verschiedene Anpassungen der bevorzugten, minimalen und maximalen Größen von JScrollPane und Canvas haben sich bei der Lösung dieses Problems als unwirksam erwiesen. Hier ist ein genauerer Blick auf den entsprechenden von NetBeans generierten Code:
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);
Der Übeltäter liegt in der Verwendung von setPreferredSize() für die Canvas-Komponente. Durch Festlegen einer festen Größe wird der Canvas unflexibel und schränkt die Größenänderungsmöglichkeiten des umgebenden JScrollPane ein.
Eine Lösung für dieses Problem besteht darin, die feste Größe zu entfernen und den Canvas seine bevorzugte Größe dynamisch berechnen zu lassen. Dies kann durch die Verwendung von pack() im umschließenden Fenster erreicht werden, um die dynamischen Größenänderungen zu berücksichtigen.
Hier ist ein Beispiel, das das Größenänderungsproblem löst:
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(); } }); } }
In diesem Beispiel wird die bevorzugte Die Größe des GraphPanel wird dynamisch berechnet und passt sich entsprechend an, wenn der Teiler verschoben wird. Dies ermöglicht eine nahtlose Größenänderung ohne Probleme mit verschwindenden Teilern.
Das obige ist der detaillierte Inhalt vonWarum verschwindet meine eingebettete Leinwand in JSplitPane von NetBeans, wenn ich die Größe ändere?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!