我正在使用NetBeans GUI编辑器创建一个应用程序,我希望在其中有一个JSplitPane,其顶部组件将是JScrollPane中的Canvas,底部组件将是JTextArea,或类似的东西.
当我向下拉分隔器,从而增加顶部组件的大小时,一切似乎都调整得很好.
当我试图向上推动分频器时出现问题:
分隔符似乎在Canvas下面(也可能在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);
由于这是我的第一个问题,我不允许在问题中嵌入图像,因此我将发布链接:
红色箭头表示分隔线的位置.
在此先感谢您的时间.
解决方法
而不是
setPreferredSize()
,让您的组件计算自己的首选大小,并打包()封闭的窗口以容纳.下面的示例在顶部添加了一个
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();
- }
- });
- }
- }