コンポーネントに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コードがイベントを処理するか、無視するようにフラグを設定する必要があります。