行为不一致

第二

当我运行以下代码时,它似乎会产生不一致的行为。在某些运行中,画布最终显示为灰色,但在另一些运行中,其最终显示为蓝色。为什么会这样,我该如何纠正呢?

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方法以擦除面板上当前绘制的任何内容。JPanelJComponent

这是使用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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章