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

前端之家收集整理的这篇文章主要介绍了java – 在jsplitpane中的jscrollpane中调整canvas的问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用NetBeans GUI编辑器创建一个应用程序,我希望在其中有一个JSplitPane,其顶部组件将是JScrollPane中的Canvas,底部组件将是JTextArea,或类似的东西.

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

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

我已经尝试了JScrollPane和Canvas的首选/最小/最大大小的各种组合,但似乎没有任何效果.

这是Netbeans生成代码的一部分,可能与手头的问题有关:

  1. jSplitPane1 = new javax.swing.JSplitPane();
  2. jScrollPane1 = new javax.swing.JScrollPane();
  3. canvas1 = new java.awt.Canvas();
  4. jTextField1 = new javax.swing.JTextField();
  5.  
  6. jSplitPane1.setDividerLocation(300);
  7. jSplitPane1.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
  8.  
  9. jScrollPane1.setViewportView(canvas1);
  10.  
  11. jSplitPane1.setTopComponent(jScrollPane1);
  12.  
  13. jTextField1.setText("jTextField1");
  14. jSplitPane1.setRightComponent(jTextField1);

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

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

在此先感谢您的时间.

解决方法

而不是 setPreferredSize(),让您的组件计算自己的首选大小,并打包()封闭的窗口以容纳.下面的示例在顶部添加了一个 draw.GraphPanel实例,在底部添加了一个相应的控制面板.
  1. import draw.GraPHPanel;
  2. import java.awt.EventQueue;
  3. import java.awt.GridLayout;
  4. import javax.swing.JFrame;
  5. import javax.swing.JPanel;
  6. import javax.swing.JScrollPane;
  7. import javax.swing.JSplitPane;
  8.  
  9. /**
  10. * @see https://stackoverflow.com/q/11942961/230513
  11. */
  12. public class SplitGraph extends JPanel {
  13.  
  14. public SplitGraph() {
  15. super(new GridLayout());
  16. JSplitPane split = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
  17. GraPHPanel graPHPanel = new GraPHPanel();
  18. split.setTopComponent(new JScrollPane(graPHPanel));
  19. split.setBottomComponent(graPHPanel.getControlPanel());
  20. this.add(split);
  21. }
  22.  
  23. private void display() {
  24. JFrame f = new JFrame("SplitGraph");
  25. f.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
  26. f.add(this);
  27. f.pack();
  28. f.setLocationRelativeTo(null);
  29. f.setVisible(true);
  30. }
  31.  
  32. public static void main(String[] args) {
  33. EventQueue.invokeLater(new Runnable() {
  34.  
  35. @Override
  36. public void run() {
  37. new SplitGraph().display();
  38. }
  39. });
  40. }
  41. }

猜你在找的Java相关文章