Прошедшая неделя поиска не принесла никакой рабочей помощи, пытаясь понять, как это сделать. Когда пользователь нажимает на обратное пространство, он сохраняет игру. Я установил, что он показывает маленькую коробку наверху, в которой говорится «Сохранение ..», и я хочу, чтобы он оставался там около 2 секунд. Я могу получить его, чтобы показать, пока кнопка нажата с этим кодом:Используйте таймер при нажатии клавиши
if (key.save) {
font = new Font(null, 0, 16);
g.setFont(font);
g.setColor(Color.DARK_GRAY);
g.fillRect(getWidth()/2 - 40, -1, 80, 35);
g.setColor(Color.BLACK);
g.drawRect(getWidth()/2 - 40, -1, 80, 35);
g.setColor(Color.white);
g.drawString("Saving..", getWidth()/2 - 30, 22);
}
Но этот код не будет работать, он даже не будет отображаться в поле вверху:
if (key.save) {
ActionListener action = new ActionListener() {
public void actionPerformed(ActionEvent e) {
Font font = new Font(null, 0, 16);
g.setFont(font);
g.setColor(Color.DARK_GRAY);
g.fillRect(getWidth()/2 - 40, -1, 80, 35);
g.setColor(Color.BLACK);
g.drawRect(getWidth()/2 - 40, -1, 80, 35);
g.setColor(Color.white);
g.drawString("Saving..", getWidth()/2 - 30, 22);
}
};
timer = new Timer(0, action);
timer.start();
}
Картина должна выполняться в централизованном месте. Это означает, что каждый раз, когда экран обновляется, он перестраивается для представления текущего состояния пользовательского интерфейса, это будет включать в себя сообщения. Таким образом, вы можете использовать другой таймер для изменения состояния пользовательского интерфейса и удалить сообщение при следующем перекраске экрана. I * HOPE * вы используете двойную буферизацию, а не 'getGraphics' ... – MadProgrammer
Да, я дважды буферизуюсь. Я действительно не понимаю, как «использовать другой таймер для изменения состояния пользовательского интерфейса и удалить сообщение при следующем перекраске экрана». – Shzylo
Объект Graphics, g, не должен быть полем класса, и вы используете его как таковое, так как ваш код испорчен. Прошли ли вы через обучающие программы Swing Graphics, так как они вам очень помогут. «Изменив состояние пользовательского интерфейса», он означает, что вы измените поля класса, вызовите 'repaint()' и используйте метод paintComponent (...) ', чтобы изменить отображаемую графику. –