我有以下程序。它應該在綠色地面上打印紅色文字。當程序打開時,我只看到綠色的背景,但沒有看到它的紅色文字。一旦窗口大小調整並重新計算,就會顯示紅色文本。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