Исчезает добавленное слово
Я хочу добавить слово в форму. Начал с простого. Хочу добавить слово так, чтобы оно не выходило за рамки экрана. Но почему-то слово или исчезает, или превращается в сплошной квадрат в правом верхнем углу, когда я пытаюсь изменить размер окна приложения. Буду рад любой помощи.
import javax.swing.*;
import java.awt.*;
import java.awt.geom.Rectangle2D;
public class Graphics extends JPanel {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.getContentPane().add(new Graphics(), BorderLayout.CENTER);
frame.setSize(400, 400);
frame.setMinimumSize(frame.getSize());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
Color rectColor;
Color textColor;
Font textFont;
String text;
{
rectColor = new Color(0x0060FF);
textColor = new Color(0x404000);
textFont = new Font("Arial", Font.BOLD, 13);
text = "Hello, World!aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
}
@Override
public void paint(java.awt.Graphics g) {
final int width = getWidth();
final int height = getHeight();
final double size = Math.sqrt(width * height);
float textSize;
//setup
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
//rectangle
g.clearRect(0,0, width, height);
g.setColor(Color.blue);
int s = (int) (size * (1 / 10d));
g.fillRoundRect(0,0, width, height, s, s);
//text
g.setColor(Color.black);
textSize = (float) size * (1 / 40f);
Font textFont = this.textFont.deriveFont(textSize);
FontMetrics textMetrics = g.getFontMetrics();
Rectangle2D r = textFont.getStringBounds(text, g2.getFontRenderContext());
System.out.println("(" + r.getWidth() + ", " + r.getHeight() + ")");
if (r.getWidth()<getWidth()) {
textSize = (float) ((getWidth()-10)*(getHeight()-10)* (1 / 40f));
}
textFont = this.textFont.deriveFont(textSize);
g.setFont(textFont);
g.drawString(text, (width - textMetrics.stringWidth(text)) / 2, (textMetrics.getAscent() + (height - (textMetrics.getAscent() + textMetrics.getDescent())) / 2));
}
}