>Java >java지도 시간 >크기를 조정할 때 NetBeans의 JSplitPane에 포함된 캔버스가 사라지는 이유는 무엇입니까?

크기를 조정할 때 NetBeans의 JSplitPane에 포함된 캔버스가 사라지는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-23 10:06:45656검색

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

NetBeans GUI 편집기에 포함된 캔버스의 크기 조정 문제

JSplitPane을 사용하여 애플리케이션을 구축할 때 JScrollPane 내의 캔버스를 맨 위에 포함합니다. 구성 요소를 사용하면 크기 조정 문제가 발생할 수 있습니다. 구분선을 위쪽으로 밀면 구분선이 캔버스 아래로 사라지는 경향이 있습니다.

JScrollPane 및 Canvas의 기본 크기, 최소 및 최대 크기에 대한 다양한 조정은 이 문제를 해결하는 데 효과적이지 않은 것으로 입증되었습니다. 다음은 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);

범인은 Canvas 구성 요소에 대해 setPreferredSize()를 사용하는 데 있습니다. 고정 크기를 설정하면 캔버스가 유연하지 않게 되고 주변 JScrollPane의 크기 조정 기능이 제한됩니다.

이 문제에 대한 해결책은 고정 크기를 제거하고 캔버스가 기본 크기를 동적으로 계산하도록 하는 것입니다. 이는 동적인 크기 변경을 수용하기 위해 바깥쪽 창에서 pack()을 사용하여 달성할 수 있습니다.

다음은 크기 조정 문제를 해결하는 예입니다.

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();
            }
        });
    }
}

이 예에서 선호되는 GraphPanel의 크기는 동적으로 계산되며 구분선이 이동되면 적절하게 조정됩니다. 이를 통해 구분선 문제가 사라지지 않고 원활하게 크기를 조정할 수 있습니다.

위 내용은 크기를 조정할 때 NetBeans의 JSplitPane에 포함된 캔버스가 사라지는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.