java - Netbeans 中的 jsplitpane

标签 java swing netbeans jsplitpane

我尝试在 Netbeans 6.9.1 中使用 JSplitPane,但由于某种原因无法正确配置它。例如。 我在 jframe 中添加一个 jtree 和一个 jtable。然后我使用“包含在 splitpane 中”。 然后我将方向设置为垂直(从水平)。
问题是,当我尝试调整分隔线位置时,无法将其放置在我想要的位置。要么一路上涨 或一直向下。手动扩展一侧后,我得到了接近我想要的格式。 我尝试做同样的事情,并在相同的 jform 中创建第二个 jsplitpane。 然后我尝试将两个 jsplitpane 包含到另一个 splitpane 中,但 splitpane 的顺序颠倒了。 我做错了什么或者分割面板不能正常工作吗?

谢谢

更新

public class Testing extends javax.swing.JFrame {

    /** Creates new form Testing */
    public Testing() {
        initComponents();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        jSplitPane1 = new javax.swing.JSplitPane();
        jScrollPane2 = new javax.swing.JScrollPane();
        jTable1 = new javax.swing.JTable();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTree1 = new javax.swing.JTree();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setName("Form"); // NOI18N

        jSplitPane1.setDividerLocation(5);
        jSplitPane1.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
        jSplitPane1.setName("jSplitPane1"); // NOI18N

        jScrollPane2.setName("jScrollPane2"); // NOI18N

        jTable1.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null}
            },
            new String [] {
                "Title 1", "Title 2", "Title 3", "Title 4"
            }
        ));
        jTable1.setName("jTable1"); // NOI18N
        jScrollPane2.setViewportView(jTable1);

        jSplitPane1.setLeftComponent(jScrollPane2);

        jScrollPane1.setName("jScrollPane1"); // NOI18N

        jTree1.setName("jTree1"); // NOI18N
        jScrollPane1.setViewportView(jTree1);

        jSplitPane1.setRightComponent(jScrollPane1);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jSplitPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGap(258, 258, 258))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jSplitPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>

最佳答案

如果您希望以相反的方式使用它们,只需在选择将它们包含在 JSplitPane 中之前交换树和表的位置即可。话虽如此,如果 NetBeans 允许您选择左/右组件,即使在完成此操作后,我也不会感到惊讶。

对于分隔符,我通常使用 setDividerLocation(Double location) 方法,该方法采用 0.0 到 1.0 之间的值。这是分隔线应位于的位置的百分比。

您使用的方法 setDividerLocation(intlocation) 设置像素值中的绝对位置,我怀疑 5 并不是您真正想要的。它还不允许您将分隔线设置到一个会使组件小于其首选大小的位置,而当您将其设置为 5 时,这肯定会发生。

因此,如果您的屏幕高度为 400 像素,并且您想将其在中间分割,请将分隔线设置为 200。

推荐阅读:How to Use Split Panes来自 Java 教程。

关于java - Netbeans 中的 jsplitpane,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3931003/

相关文章:

java - 为 Spring MVC 中包含 Tile 的任何 Tiles 布局提供对象

java - 使用 ASM 重命名类会在编译的 jar 上抛出 ClassCastException 和 AbstractMethodError

java - 使用 Java Swing 进行线程处理

java - 在java中摆脱png的某些部分

java - 从匿名类中检索数据

java - 如何更改子卡中的cardLayout卡?

java - 使用 Netbeans 将 JavaFx 代码部署到 Android 设备

java - 为什么我的循环会迭代以及如何解决这个问题?

java - 什么可以代替这段代码?

java - 为什么第二个代码比第一个更有效?