在jsplitpane中的jscrollpane中调整canvas的问题

Sak*_*tdk 7 java swing jscrollpane jsplitpane

我正在使用NetBeans GUI编辑器创建一个应用程序,我希望在其中有一个JSplitPane,其顶部组件将Canvas在a中JScrollPane,而底部组件将是a JTextArea或类似的东西.

当我向下拉分隔器,从而增加顶部组件的大小时,一切似乎都调整得很好.

当我试图向上推动分频器时出现问题:分频器似乎在Canvas(也可能在它下面JScrollPane)下方.

我试图首选/最小/最大的尺寸的各种组合JScrollPaneCanvas,但似乎没有任何工作.

这是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);
Run Code Online (Sandbox Code Playgroud)

由于这是我的第一个问题,我不允许在问题中嵌入图像,因此我将发布链接:

红色箭头表示分隔线的位置.

在此先感谢您的时间.

tra*_*god 9

而不是setPreferredSize()让您的组件计算自己的首选大小和pack()封闭Window容纳.下面的示例将draw.GraphPanel顶部的实例和相应的控制面板添加到底部.

图片

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();
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 另外,不要让GUI设计师决定你的设计. (2认同)

Sak*_*tdk 3

在阅读 davidbuzatto 的评论后,我在 google 上搜索了有关混合 AWT 和 Swing 组件的信息,我有点惊讶地发现这是一个如此糟糕的做法。

我在这里找到了我的问题的最准确答案

重量级组件有自己的 Z 顺序。这就是 Swing 和 AWT 不能组合在单个容器中的原因。如果是,AWT 组件将绘制在 Swing 组件的顶部。

例如:当AWT组件与JtabbedPane一起使用时,切换选项卡时它们不会消失。

感谢 davidbuzatto 给我指路:-)