JSplitPane小边框但大抓取点击框



我有两个JPanel组合在一个JSplitPane中。用户应该能够非常自由地移动拆分窗格分隔符,但分隔符不应该太大(最好只有1px)。

有没有办法将分隔符大小保持在1,但增加点击分隔符的点击框?因此,当鼠标被点击时,分隔符每侧可能也会被抓取20像素?

您可以将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();
}
});
*/
}
}

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

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

相关内容

  • 没有找到相关文章

最新更新