为什么标题栏与 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/