0

为什么标题栏与JPanel的像素重叠。这里有一些代码:

protected void init() {
    this.setContentPane(new MyPanel());
    this.setSize(915, 725);
    this.setVisible(true);
}

class MyPanel extends JPanel {

    @Override
    public void paintComponent(Graphics _g) {
        super.paintComponent(_g);
        Graphics2D g = (Graphics2D)_g;

        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        Font font = new Font("Monospaced", Font.PLAIN, 14);

        g.setFont(font);
        g.setColor(Color.red);

        for(int x=0; x<60; x++) {
            for(int y=0; y< 50; y++) {
                g.drawString("█", x*15, 0);
            }
        }
    }
}

我已将 JPanel 添加到 JFrame 并在 y=0 处绘制一些字符串。

4

2 回答 2

1

y = 0位于面板顶部,坐标向下增长。如果您希望在面板顶部出现 20 像素高的文本行,则需要将其绘制在y = 20. 更一般地说,您可以使用FontMetrics该类来确定文本行的高度并使用适当的偏移量:

FontMetrics metrics = _g.getFontMetrics(font);
int lineHeight = metrics.getHeight();

在您当前的代码中,您在 1 像素网格的单元格中绘制字符(大约 20 像素高)。这意味着您的角色将彼此显着重叠。您需要在此处按远大于 1 的值对循环进行步进,以便为字符提供足够的空间。

于 2012-06-25T19:56:51.963 回答
0
于 2012-06-25T19:58:11.560 回答