Java качели удерживайте обе кнопки мыши
Я хочу реализовать метод, при котором пользователю необходимо одновременно удерживать левую и правую кнопки мыши.
Я использую Swing и Java 1.7. Я пробовал это, но он не обнаруживает случай с обеими кнопками, как я ожидал:
public void mousePressed(MouseEvent e) {
if (SwingUtilities.isLeftMouseButton(e) && SwingUtilities.isRightMouseButton(e)){
///code here
}
}
я попытался разделить методы и использовать значения bool, чтобы решить, нажата ли кнопка мыши, а затем я установил условие, чтобы выяснить, нажаты ли они оба одновременно, но это тоже не сработало..
2 ответа
Это SSCCE, который делает то, что вы хотите... т.е. если я правильно понял ваш вопрос.
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Stackru15957076 extends MouseAdapter
{
private JLabel status;
private boolean isLeftPressed;
private boolean isRightPressed;
public Stackru15957076 ()
{
JFrame frame = new JFrame ();
frame.setDefaultCloseOperation (JFrame.DISPOSE_ON_CLOSE);
JPanel panel = new JPanel (new FlowLayout (FlowLayout.CENTER));
status = new JLabel ("waiting for both mouse buttons...");
status.addMouseListener (this);
panel.add (status);
frame.add (panel);
frame.pack ();
frame.setVisible (true);
isLeftPressed = false;
isRightPressed = false;
}
@Override
public void mousePressed (MouseEvent e)
{
if (SwingUtilities.isLeftMouseButton (e))
{
isLeftPressed = true;
}
else if (SwingUtilities.isRightMouseButton (e))
{
isRightPressed = true;
}
if (isLeftPressed && isRightPressed)
{
status.setText ("both buttons are pressed");
}
}
@Override
public void mouseReleased (MouseEvent e)
{
if (SwingUtilities.isLeftMouseButton (e))
{
isLeftPressed = false;
}
else if (SwingUtilities.isRightMouseButton (e))
{
isRightPressed = false;
}
status.setText ("waiting for both mouse buttons...");
}
public static void main (String[] args)
{
SwingUtilities.invokeLater (new Runnable ()
{
@Override
public void run ()
{
new Stackru15957076 ();
}
});
}
}
Кажется, что это невозможно сделать напрямую, так как события мыши запускаются последовательно. Смотрите, например, этот ТАК вопрос / ответы.
Таким образом, вам нужно решить, что "в то же время" на самом деле означает для вас (то есть, насколько близко это время должно быть). Затем вы можете захватить два отдельных события и сравнить их getWhen()
ценности.