【问题标题】:How to move JSplitPane's divider when I double-clicked it?双击时如何移动 JSplitPane 的分隔线?
【发布时间】:2017-08-02 12:36:13
【问题描述】:

如果我双击分隔线,我想将 JSplitPane 的分隔线移动到中心。

所以我将 MouseListener 添加到 JSplitPane 但它不起作用。

只有在没有分隔线的情况下双击其他 JSplitPane 的空间时才有效。

有什么方法可以随心所欲地工作吗?

这是我失败的代码

splitPane.addMouseListener(new MouseAdapter() {
    @Override
    public void mouseClicked(MouseEvent e) {
        //super.mouseClicked(e);
        splitPane.setDividerLocation(0.5);
    }
});

(当我使用 MouseListener 时它的工作原理相同)

【问题讨论】:

  • 寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建 minimal reproducible example。使用“编辑”链接改进您的问题 - 不要通过 cmets 添加更多信息。谢谢!
  • 换句话说:试着写一段最小的代码来显示问题。很多时候,这样做已经可以告诉您代码有什么问题。

标签: java swing jsplitpane


【解决方案1】:

您的代码不起作用的原因是 JSplitPane 本身没有收到点击事件。

相反,JSplitPane 的 UI 类可以。

此代码有效:

JSplitPane split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, component1, component2);

    SplitPaneUI spui = split.getUI();
    if (spui instanceof BasicSplitPaneUI) {
        ((BasicSplitPaneUI) spui).getDivider().addMouseListener(new MouseAdapter() {

            @Override
            public void mouseClicked(MouseEvent arg0) {
                if (arg0.getClickCount() == 2) {
                    split.setDividerLocation(0.5);
                }
            }
        });
    }

【讨论】:

  • @최혜정 不客气。 :) 如果对您有帮助,请考虑接受此答案,以便其他可能遇到相同问题的人也知道它有效。
  • 哦,我忘了。我当然愿意接受你的回答! :D
猜你喜欢
  • 1970-01-01
  • 2012-03-04
  • 1970-01-01
  • 2017-03-05
  • 1970-01-01
  • 2012-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多