Как запретить другим компонентам получать события мыши во время перетаскивания разделителя?
Не знаю, как отключить все события.
Но я предполагаю, что вы действительно беспокоитесь о том, что вы не хотите, чтобы фон изменился.
Если это так, то вы можете добавить логику исключений в MouseListener, чтобы игнорировать событие mouseEntered при нажатии кнопки мыши:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Test {
public static void main(String[] args) throws Exception {
JButton top = new JButton("top");
top.setRolloverEnabled(true);
top.setMinimumSize(new Dimension(100, 100));
top.addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) {
if (SwingUtilities.isLeftMouseButton(e)) return;
top.setBackground(Color.green);
}
@Override
public void mouseExited(MouseEvent e) {
top.setBackground(null);
}
});
JButton bottom = new JButton("bottom");
bottom.setRolloverEnabled(true);
bottom.setMinimumSize(new Dimension(100, 100));
bottom.addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) {
if (SwingUtilities.isLeftMouseButton(e)) return;
bottom.setBackground(Color.green);
}
@Override
public void mouseExited(MouseEvent e) {
bottom.setBackground(null);
}
});
JSplitPane split = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
split.setResizeWeight(0.5);
split.setContinuousLayout(true);
split.setTopComponent(top);
split.setBottomComponent(bottom);
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(600, 400);
f.setLocationRelativeTo(null);
f.getContentPane().setLayout(new BorderLayout());
f.getContentPane().add(split, BorderLayout.CENTER);
f.setVisible(true);
}
}
Редактировать:
Возможно, вы сможетеиспользуйте свой собственный EventQueue.EventQueue отвечает за отправку событий компонентам.Поэтому, возможно, вы сможете:
- Добавить MouseListener к разделителю
- на mousePressed вы замените EventQueue по умолчанию на свой собственный EventQueue, который будет игнорировать MouseEvents для всех компонентов, кроме разделителя.
- на мыши. Пожалуйста, восстановите исходную EventQueue.
Проверьте Глобальная диспетчеризация событий , чтобы получить базовый пример для начала работы.