1

文字列の外側に長方形の境界線を持つ Graphics を使用して文字列を描画したい。

これは私がすでに行っていることです:

     public void paint(Graphics g) {
        Graphics2D g2d = (Graphics2D) g;
        FontMetrics fontMetrics = g2d.getFontMetrics();
        String str = "aString Test";

        int width = fontMetrics.stringWidth(str);
        int height = fontMetrics.getHeight();

        int x = 100;
        int y = 100;

        // Draw String
        g2d.drawString(str, x, y);
        // Draw Rectangle Border based on the string length & width
        g2d.drawRect(x - 2, y - height + 2, width + 4, height);
    }

私の問題は、新しい行 ("\n") で文字列を描画し、長方形の境界線を外側にしたいことです:

これは新しい行のコードです:

     public void paint(Graphics g) {
        Graphics2D g2d = (Graphics2D) g;
        FontMetrics fontMetrics = g2d.getFontMetrics();
        String str = "aString\nTest";

        int width = fontMetrics.stringWidth(str);
        int height = fontMetrics.getHeight();

        int x = 100;
        int y = 100;

        // Drawing string per line
        for (String line : str.split("\n")) {
            g2d.drawString(line, x, y += g.getFontMetrics().getHeight());
        }
    }

誰でもこの問題を解決できますか? あなたの助けと提案に感謝します...

最終コード

        int numberOfLines = 0;

        for (String line : str.split("\n")) {
            if(numberOfLines == 0)
                g2d.drawString(line, x, y);
            else
                g2d.drawString(line, x, y += g.getFontMetrics().getHeight());
            numberOfLines++;
        }

        g2d.drawRect(x - 2, y - height * numberOfLines + 2, width + 4, height * numberOfLines);
4

2 に答える 2

3

私が正しく理解していれば、あなたの問題は長方形の高さにあります。

持っている行数を記録してみてください。例:

int numberOfLines=0;

for (String line : str.split("\n")) {
    g2d.drawString(line, x , y + (numberOfLines * height));
    numberOfLines++;
}

g2d.drawRect(x - 2, y - height + 2, width + 4, height * numberOfLines);

これにより、文字列を描画するための y 値の計算方法も変更されます。

そのようなものは機能しますか?

于 2012-04-10T02:53:55.763 に答える
0

通常の JLabel オブジェクトを作成し、そのテキストを html で設定して
タグを含めることもできます。たとえばmyLabel.setText("<html>aString<br>Test</html>");、JLabel に 1 行の境界線を追加します。

于 2012-04-10T03:08:07.300 に答える