使用getInsets时背景渗漏

时间:2018-08-27 09:25:07

标签: java jframe

我目前正在为一个事实而苦苦挣扎,我的画框背景是低谷。结果,我框架的“背景图像”始终是框架打开时的背后背景。

问题的外观

How the frame does look

代码

import java.awt.Button;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.GraphicsEnvironment;

import javax.swing.JFrame;

public class launcher extends JFrame{

    Button btn;

    public launcher() {
        this.setSize(400, 300);
        this.setLocationRelativeTo(null);

    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                launcher l = new launcher();
                l.setVisible(true);
            }
        });
    }

    public void paint(Graphics g) {     
        String s = "Dieser String steht in der Mitte des Fensters";
        int breite = getSize().width - getInsets().left - getInsets().right;
        int hoehe = getSize().height - getInsets().bottom - getInsets().top;
        Font font = new Font("Serif", Font.BOLD + Font.ITALIC, 15);
        FontMetrics fmetrics = getFontMetrics(font);
        int zeilenMitte = fmetrics.getAscent() - (fmetrics.getAscent() + fmetrics.getDescent()) / 2;

        g.setFont(font);
        g.drawString(s, getInsets().left + (breite - fmetrics.stringWidth(s)) / 2,
                getInsets().top + hoehe / 2 + zeilenMitte);

        g.drawRect(this.getInsets().left + 20, 
                this.getInsets().top + 20, 
                (int)this.getSize().getWidth() - this.getInsets().left - this.getInsets().right - 40,
                (int)this.getSize().getHeight() - this.getInsets().top -  this.getInsets().bottom -40);
        g.setColor(Color.yellow);
        g.fillRect(45, 55, 200, 50);
        g.setColor(Color.blue);

        g.setFont(font);
        g.drawString("gefülltes Rechteck", 50, 80);

    }

}

我已经尝试过的东西

我删除了代码的某些部分,以查看问题本身所在的位置。经过测试后,我很确定问题出在这里(第42行)

g.drawString(s, getInsets().left + (breite - fmetrics.stringWidth(s)) / 2,
            getInsets().top + hoehe / 2 + zeilenMitte);

删除行后,它看起来像这样(看起来应该是这样)。

How the frame should look

但是,这当然不是我的目标,只是删除行并忽略它...

注意

请不要抱怨我的代码的结构。我目前正在通过以下书籍学习这种新语言:

  

Vorcon的Java 2 SDK v 1.4.0本书

所以我只是一起研究一些命令,以后会注意结构。

0 个答案:

没有答案