прохождение фона при использовании getInsets - PullRequest
0 голосов
/ 27 августа 2018

В настоящее время я борюсь с тем фактом, что мой фон моей рамки кровоточит. В результате этого «фоновое изображение» моего кадра всегда было тем, что находилось за кадром в момент его открытия.

Как выглядит проблема

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

Но, конечно, это не моя цель, просто убрать строку и забыть об этом ...

Примечание

Пожалуйста, не жалуйтесь на структуру моего кода. В настоящее время я изучаю этот новый язык со следующей книгой:

Java 2 SDK v 1.4.0, книга Vorcon

Так что я просто собираю некоторые команды и позже буду разбираться со структурой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...