我尝试在 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/