当我运行以下代码时,它似乎会产生不一致的行为。在某些运行中,画布最终显示为灰色,但在另一些运行中,其最终显示为蓝色。为什么会这样,我该如何纠正呢?
import java.awt.*;
import javax.swing.*;
public class psw extends JFrame {
String symbols="~ ! @ # $ % ^ & * ( ) _ = + : ; < , > . ? / | \\ '";
public static void main(String[] args){
psw app=new psw();
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) ;
app.setSize(600, 450);
app.setVisible(true);
app.getContentPane().setBackground(new Color(30,144,255));
@Override
public void paint(Graphics g) {
g.setColor(new Color(255,255,255));
g.drawRect(10, 10, 60, 50);
g.drawLine(60, 50, 220, 20);
g.drawString(symbols, 10, 150);
}
}
您需要记住致电super.paint(g);
。那显示了那幅画。
public void paint(Graphics g) {
super.paint(g);
g.setColor(new Color(255,255,255));
g.drawRect(10, 10, 60, 50);
g.drawLine(60, 50, 220, 20);
g.drawString(symbols, 10, 150);
}
JFrame
它们没有双重缓冲)也不是一个好主意。而是主要在组件上绘制JPanel
并覆盖其paintComponent
方法。就像一样paint
,你需要打电话super.paintComponent
。从(该类)的超类super.paintComponent(g)
调用该paintComponent
方法以擦除面板上当前绘制的任何内容。JPanel
JComponent
这是使用aJPanel
而不是a来运行的方式JFrame
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class psw extends JPanel {
String symbols = "~ ! @ # $ % ^ & * ( ) _ = + : ; < , > . ? / | \\ '";
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame app = new JFrame();
app.add(new psw());
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
app.pack();
app.setVisible(true);
}
});
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(new Color(30, 144, 255));
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(new Color(255, 255, 255));
g.drawRect(10, 10, 60, 50);
g.drawLine(60, 50, 220, 20);
g.drawString(symbols, 10, 150);
}
public Dimension getPreferredSize() {
return new Dimension(600, 450);
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句