Java JSplitPane小边框但大抓取盒
我有两个JPanel组合在一个JSplitPane中。用户应该能够非常自由地移动拆分窗格分隔符,但分隔符不应该太大(最好仅1px)Java JSplitPane小边框但大抓取盒,java,swing,jsplitpane,Java,Swing,Jsplitpane,我有两个JPanel组合在一个JSplitPane中。用户应该能够非常自由地移动拆分窗格分隔符,但分隔符不应该太大(最好仅1px) 有没有办法让dividerSize保持在1,但增加点击分隔符的点击框?因此,当点击鼠标时,分隔器的每侧也会被抓取20像素?您可以向组件添加鼠标侦听器,并手动调整分隔器的位置 以下是一个让您开始学习的基本示例: import java.awt.*; import java.awt.event.*; import javax.swing.*; public class
有没有办法让dividerSize保持在1,但增加点击分隔符的点击框?因此,当点击鼠标时,分隔器的每侧也会被抓取20像素?您可以向组件添加鼠标侦听器,并手动调整分隔器的位置 以下是一个让您开始学习的基本示例:
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代码可以处理事件,或者在距离边缘不够近时忽略事件