В качестве альтернативы Swing-Timer
(например, here) вы можете использовать простой SwingWorker
для реализации задержки. В общем случае вы не должны выполнять задержку, то есть на Thread.sleep(1000)
, на Swing EDT, так как это блокирует gui (for further information ...). Кроме того, вы должны использовать MouseListener
для получения необходимой информации (остановка таймера при отпускании мыши или выход из зоны кнопки). Вот очень короткий пример:
public class JButtonTest extends JFrame {
public static void main(String[] args) {
JButtonTest x = new JButtonTest();
JButton button = new JButton("Delete");
button.addMouseListener(new MouseAdapter() {
private static final long DELTA = 2000;
private SwingWorker<Void, Void> waitingWorker;
private Long timer;
@Override
public void mousePressed(MouseEvent e) {
timer = System.currentTimeMillis();
System.out.println("delete single char");//DO single delete here
if (waitingWorker != null && !waitingWorker.isDone())
waitingWorker.cancel(true);
waitingWorker = new SwingWorker<Void, Void>() {
@Override
protected Void doInBackground() throws Exception {
Thread.sleep(DELTA);
return null;
}
@Override
protected void done() {
if (timer != null && System.currentTimeMillis() >= timer + DELTA)
System.out.println("delete all text");//DO text delete here
}
};
waitingWorker.execute();
}
@Override
public void mouseReleased(MouseEvent e) {
timer = null;
}
@Override
public void mouseExited(MouseEvent e) {
timer = null;
}
});
x.add(button);
x.setSize(100, 100);
x.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
x.setVisible(true);
}
}
Привет, добро пожаловать в StackOverflow! Пожалуйста, разместите код и покажите нам, что вы пробовали. – msanford
В кнопочном режиме удалите символ и запустите 2-секундный таймер Swing; На buttonUp, убить таймер. Если таймер когда-либо называет зарегистрированный ActionListener (он вызывается до того, как buttonUp убивает его), удалите оставшуюся часть текста. – FredK
Как предложил @msanford, этот вопрос нуждается в серьезном улучшении. Я сделал все, что мог, с заголовком/содержанием, но вам решать, как это сделать. Например, попробуйте [этот] (http://stackoverflow.com/help/how-to-ask). –