gpt4 book ai didi

java - JSplitPane 边框小但抓取框大

转载 作者:行者123 更新时间:2023-11-30 08:37:06 24 4
gpt4 key购买 nike

我在一个 JSplitPane 中组合了两个 JPanel。用户应该能够非常自由地移动 split-pane-divider,但分隔线不能太大(最好只有 1px)。

有没有办法将 dividerSize 保持为 1,但增加点击分隔线的命中框?因此,当单击鼠标时,分隔线每边可能有 20px 的距离也会被捕获?

最佳答案

您可以将 MouseListener 添加到组件并手动调整分隔线位置。

这是一个让您入门的基本示例:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class DividerListener extends MouseAdapter
{
private JSplitPane splitPane;
private Component component;
private int pressedX;
private int dividerLocation;

public DividerListener(JSplitPane splitPane, Component component)
{
this.splitPane = splitPane;
this.component = component;
component.addMouseListener(this);
component.addMouseMotionListener(this);
}

@Override
public void mousePressed(MouseEvent e)
{
pressedX = SwingUtilities.convertPoint(component, e.getPoint(), splitPane).x;
dividerLocation = splitPane.getDividerLocation();
}

@Override
public void mouseDragged(MouseEvent e)
{

int draggedX = SwingUtilities.convertPoint(component, e.getPoint(), splitPane).x;
int deltaX = draggedX - pressedX;
splitPane.setDividerLocation(dividerLocation + deltaX);
}

private static void createAndShowGUI()
{
JSplitPane splitPane = new JSplitPane();

JLabel left = new JLabel("LEFT");
splitPane.setLeftComponent(left);
new DividerListener(splitPane, left);

JLabel right = new JLabel("RIGHT");
splitPane.setRightComponent(right);
new DividerListener(splitPane, right);

JFrame frame = new JFrame("SSCCE");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add( splitPane);
frame.setLocationByPlatform( true );
frame.setSize(200, 200);
frame.setVisible( true );
}

public static void main(String[] args)
{
EventQueue.invokeLater( () -> createAndShowGUI() );
/*
EventQueue.invokeLater(new Runnable()
{
public void run()
{
createAndShowGUI();
}
});
*/
}
}

您需要自定义逻辑来检查鼠标是在左组件的右边缘还是在右组件的左边缘按下。所以您可能需要添加另一个参数,以便您知道如何进行边界检查。

然后您需要设置一个标志,以便 mouseDragged 代码可以处理事件或在您离边缘不够近时忽略它。

关于java - JSplitPane 边框小但抓取框大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37462651/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com