Не звоните super.paint(g);
на JFrame
, если вы используете BufferStrategy
.Просто рисуйте прямо в буфер.Вы также должны добавить MouseListener
к Canvas
, а не к рамке.
Canvas
выложен ВНУТРИ границ рамок окна, то есть он будет смещен и меньше фактическогосам кадр.
События мыши автоматически преобразуются в контекст координат источника, это означает, что вы в настоящее время пытаетесь сравнить значения, поступающие из контекста координат кадра, со значениями, используемыми Canvas
, которые отличаются
Один вопрос: как бы я рисовал непосредственно в буфер, если в буфере нет «графических методов», таких как fillRect ()?
Graphics g = bufferStrategy.getDrawGraphics()
дает вам контекст Graphics
, вы затем рисуете прямо к нему.
Вы не хотите вызывать paint
напрямую (когда-либо), так как это может быть вызвано системой, и вы можете столкнуться с условиями гонки и другими проблемами
Swing использует другой алгоритм рисования, из которого вы отказались, используя BufferStrategy
, это означает, что вы больше не можете использовать "нормальный" процесс рисования Swing и вместо этого должны написать свой собственный