У меня есть следующая программа. Предполагается напечатать красный текст на зеленой земле. Когда программа открывается, я вижу только зеленый фон, но не красный текст на нем. После изменения размера окна и повторного вычисления появляется красный текст.Java swing.JFrame только сохраняет содержимое при изменении размера окна
Он работает правильно, если я использую JPanel внутри окна и добавляю туда компонент. Если цвета заданы в paintComponent, тогда все работает нормально.
Итак, где проблема, если я рисую на JFrame напрямую. Я пропустил первое «обновление» или что-то еще? Похоже, что некоторая информация отсутствует при первом розыгрыше окна (дополнительный текст), о котором программа узнает только после того, как окно будет пересчитано и перерисовано.
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
public class PaintAWT extends JFrame {
PaintAWT() {
this.setSize(600, 400);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
@Override
public void paint(Graphics g) {
super.paint(g);
// Set background color:
// If you don't paint the background, one can see the red text.
// If I use setBackground I only see a green window, until it is
// resized, then the red text appears on green ground
this.getContentPane().setBackground(new Color(0,255,0));
// Set color of text
g.setColor(new Color(255,0,0));
// Paint string
g.drawString("Test", 50, 50);
}
public static void main(String[] args) {
new PaintAWT();
}
}
Для начала вы должны переопределить 'paintComponent', а не' paint'. И я лично рекомендую расширять 'JPanel' вместо' JFrame'. Вам также нужен способ управления вызовом 'repaint', потому что по логике Swing контейнер будет обычно перерисовываться только тогда, когда это необходимо (т. Е. При изменении размера окна). – Gorbles