Rumah >Java >javaTutorial >Mengapa Kanvas Terbenam Saya dalam JSplitPane NetBeans Hilang Apabila Saiz semula?

Mengapa Kanvas Terbenam Saya dalam JSplitPane NetBeans Hilang Apabila Saiz semula?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-23 10:06:45712semak imbas

Why Does My Embedded Canvas in NetBeans' JSplitPane Disappear When Resizing?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn