У меня есть этот код, чтобы нарисовать конкретную строку (и определенный цвет), в зависимости от результата логического метода(). Я использую метод JPanel#paintComponent(Graphics)
для рисования строки, и я использую другой поток для перерисовки.Метод drawString() перезаписывает предыдущие рисунки (paintComponent не очищается)
run
метод Нить в:
@Override
public void run() {
while (true) {
frame.repaint(); // This is the JPanel, not the JFrame
}
}
JPanel-расширенный класс:
public class FrameDisplay extends JPanel {
public FrameDisplay() throws HeadlessException {
this.setSize(300, 100);
this.setBackground(new Color(0, 0, 0, 0));
this.setVisible(true);
}
@Override
public void paintComponent(Graphics g1) {
super.paintComponent(g1);
Graphics2D g = (Graphics2D)g1;
g.setColor(CSGOBot.isRecording() ? Color.RED : Color.GREEN);
g.setFont(g.getFont().deriveFont(14f).deriveFont(Font.BOLD));
g.drawString(CSGOBot.isRecording() ? "RECORDING (Alt+R to Stop)" : "Record on hold (Alt+R to Start)", 5, 10);
}
}
Однако метод paintComponent не ясно само по себе, а краска Струны над собой, когда логическое значение изменилось. Это скриншот результата:
Я пытаюсь избегать использования метода clearRect
, так как она очищает любые стили, внесенные в панели/кадр.