Java 7 - JPanel PaintComponent 标题栏重叠

标签 java swing draw titlebar overlapping

为什么标题栏与 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 处绘制一些字符串。

最佳答案

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

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

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

关于Java 7 - JPanel PaintComponent 标题栏重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11196365/

相关文章:

Java KeyPressed KeyRelease 并按住某个键

Java - 绘制线宽为1的放大形状

java - Spring 数据休息 : Can we rename the "content" property in pagination result?

java - Java中如何限制开发者使用反射访问私有(private)方法和构造函数?

java - 在 HMVC 中如何将模型更改事件发送到多个 View ?

java - Swing RTF 编辑组件 - RTFEditorkit 的替代品?

java - Java运行时需要判断对象的类型。设计不好?

java - 从另一个 servlet 调用 servlet 的 service()

java - 重绘不调用绘制

java - 改变java形状列表的颜色