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
Lepaskan: 2024-12-23 10:06:45
asal
655 orang telah melayarinya

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);
Salin selepas log masuk

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();
            }
        });
    }
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan