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

Код
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);
После того, как я удалил строку, она выглядит так (как она должна выглядеть).

Но, конечно, это не моя цель, просто убрать строку и забыть об этом ...
Примечание
Пожалуйста, не жалуйтесь на структуру моего кода. В настоящее время я изучаю этот новый язык со следующей книгой:
Java 2 SDK v 1.4.0, книга Vorcon
Так что я просто собираю некоторые команды и позже буду разбираться со структурой.