不需要的透明JFrame背景

时间:2015-08-23 15:35:08

标签: java graphics

public void paint(Graphics g){
    g.setColor(Color.red);
    g.drawString("hello",50,50);
}

框架的背景看起来很奇怪和透明。 这个问题只发生在我绘制一个字符串时,但是当我绘制一个矩形或任何其他形状时,框架看起来很好。

这是代码:

import javax.swing.*;
import java.awt.*;

public class B extends JFrame {
    public B() {
        this.setTitle("programme");
        this.setSize(400, 300);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setLayout(new FlowLayout());
        this.setVisible(true);
    }

    public void paint(Graphics g) {
        g.setColor(Color.red);
        g.drawString("hello", 50, 50);
    }
}

这是结果:

enter image description here

2 个答案:

答案 0 :(得分:1)

感谢您的帮助。 我找到了答案。 问题发生是因为我没有将对象(g)传递给paint方法

中的构造函数

这是整个代码:

import java.awt.Color;

import java.awt.FlowLayout;

import java.awt.Graphics;

导入javax.swing.JFrame;

B类扩展了JFrame {

  public B() {

        this.setTitle("programme");
        this.setSize(400,200);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setLayout(new FlowLayout());
        this.setVisible(true);
    }


   public void paint(Graphics g) {


       super.paint(g);  
       // I have added the previous line and it solved the problem
       g.setColor(Color.red);    
       g.drawString("hello", 50, 50);

   }      

}

public class main {

public static void main(String[] args) {

    B obj = new B();

}

}

无论如何,谢谢你的帮助。

答案 1 :(得分:0)

很奇怪,在我的地方,每件事都很好。 尝试使用构造函数:

super("programme");

代替setTitle("programme"); 如果没有工作添加

setBackground(Color.lightGray);

在构造函数中。

无论如何,当你想绘制String时,你应该使用JLabel类。