Mengubah Saiz Isu dengan Kanvas Terbenam dalam NetBeans GUI Editor
Dalam membina aplikasi dengan JSplitPane, mengandungi Kanvas dalam JScrollPane sebagai bahagian atas komponen, pengguna mungkin menghadapi masalah mengubah saiz. Apabila menolak pembahagi ke atas, pembahagi cenderung hilang di bawah Kanvas.
Pelbagai pelarasan kepada saiz pilihan, minimum dan maksimum JScrollPane dan Kanvas telah terbukti tidak berkesan dalam menyelesaikan isu ini. Berikut ialah pandangan yang lebih dekat pada kod berkaitan yang dijana oleh 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);
Penyebabnya terletak pada penggunaan setPreferredSize() untuk komponen Kanvas. Dengan menetapkan saiz tetap, Kanvas menjadi tidak fleksibel dan mengehadkan keupayaan mengubah saiz JScrollPane di sekelilingnya.
Penyelesaian kepada isu ini ialah mengalih keluar saiz tetap dan membiarkan Kanvas mengira saiz pilihannya secara dinamik. Ini boleh dicapai dengan menggunakan pack() pada tetingkap yang dilampirkan untuk menampung perubahan saiz dinamik.
Berikut ialah contoh yang menyelesaikan masalah saiz semula:
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(); } }); } }
Dalam contoh ini, pilihan utama saiz GraphPanel dikira secara dinamik dan dilaraskan dengan sewajarnya apabila pembahagi dialihkan. Ini membolehkan pengalaman mengubah saiz yang lancar tanpa sebarang isu pembahagi yang hilang.
Atas ialah kandungan terperinci Mengapa Kanvas Terbenam Saya dalam JSplitPane NetBeans Hilang Apabila Saiz semula?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!