【问题标题】:Dragging handle in Java SwingJava Swing中的拖动手柄
【发布时间】:2009-04-23 20:12:23
【问题描述】:

我似乎不知道如何在 Java Swing 中制作调整大小的拖动手柄。如果您不确定我的意思,请打开本网站上的“”页面并查看文本区域的底部。它有一个栏,您可以拖动它以更改区域的大小。我正在寻找一种在 Java Swing 中执行此操作的方法。我什至不知道在哪里看。

任何帮助将不胜感激。

【问题讨论】:

  • 这里没有链接
  • 您真的只是想要一个 JSplitPane 吗?我以为您想要更复杂的功能,但也许我不应该这样做。
  • 不,我只需要 JSplitPane。无论如何,感谢您的帮助 mmyers。

标签: java swing


【解决方案1】:

在我看来,Stack Overflow 发布表单上使用的拖动句柄在外观和功能上都与垂直的JSplitPane 最相似。

【讨论】:

  • 正是我想要的。谢谢。
【解决方案2】:

我也没有做过,但既然你只是在寻找一个开始,我会试一试。

我会在您希望出现句柄的位置放置某种JComponent(可能是自定义子类)(我假设您可以很好地操作布局管理器来完成该部分)。然后,我将在组件中添加一个MouseListener 和一个MouseMotionListener——可能是同一个类,MouseAdapter 的子类。当检测到单击和拖动时,我会调整手柄所附加到的组件的大小。

这有帮助吗?

【讨论】:

    【解决方案3】:

    这只是您可以开始寻找的一个想法。

    在 swing 中,gui 组件确实使用了一个布局管理器 (LayoutManagers),它负责将每个图形元素放置在它的位置。

    它们有点棘手,因为布局元素的逻辑因 LayoutManager 不同而不同,大多数情况下您必须将它们组合起来。

    LayoutManagers 通常会查询他们正在布局的组件以了解最小尺寸、最大尺寸和首选尺寸。一些 lym 完全忽略此信息,其中一些人部分使用它。

    建议是使用一个布局管理器,它尊重首选大小(或最大值),然后在其他元素上添加一个鼠标侦听器。当元素被拖动时,您可以通过编程方式增加/减少组件的最大/最小/preff 大小(很可能是 JTextArea ),并让 LYM 调整组件的视觉外观。

    所以它看起来像这样的伪:

     public App { 
    
          private JComponent container;
          private JComponent myTarget;
          private JComponent dragComponent;
    
    
          public void someWhere() { 
                  container.setLayoutManager( someLayoutManager() );
                  container.add( myTarget );
                  container.add( dragComponent );
    
                  // warn: not actual method names, I don't remember them
                   dragComponent.addMouseListener( new MouseAdapter() {
                        public void mouseDragged( MouseEvent me ) { 
                              Point point me.getPoint();
                              int h = myTarget.getHeight();
                              int w = myTarget.getWidth();
                              // Do some math to know if you have to add or subtract. 
                              int movement = // -20, +20, whatever.
                              myTarget.setMaximumSize( h + ( movement ) , w ); 
                        }
                   } );
           }
     }
    

    这只是一个伪代码,所以不要拍我。

    同样的想法是找到正确的布局管理器并添加鼠标侦听器以了解组件被拖动到哪里。每次拖动组件时,您都会更改目标组件的大小并让 LayoutManager 重塑组件。

    我希望这会有所帮助。

    附言Swing 也有 drag/drop 支持,看看是否有帮助。

    【讨论】:

      【解决方案4】:

      正如另一个人已经回答的那样,您要做的只是需要将 JSplitPane 设置为水平对齐。您可以将分割条的宽度调整为您想要的像素大小。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多