gpt4 book ai didi

java - JPanel setPreferredSize 向宽度和高度添加两个额外的像素

转载 作者:行者123 更新时间:2023-12-01 09:07:49 25 4
gpt4 key购买 nike

我正在尝试正确调整 JPanel 的大小,使其完全适合渲染的 8 x 8 棋盘。当我使用绘画程序放大时,我注意到宽度和高度上都添加了两个额外的像素......

screenshot

这还不错,但是当我用其他 JPanel(使用 BorderLayout 在 JFrame 中的北、南、东、西)包围此 CENTER 面板时,白色间隙很明显。

我通过在调用 setPreferredSize 时将宽度和高度减去 2 个像素来解决这个问题,但如果此异常是由于图形驱动程序错误引起的,那么这不是一个好的解决方案。

好奇是否有更清洁的解决方案。下面提供了使用 JDK 7 64-BIT Windows 7 的代码...

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.io.IOException;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class JavaExample {

private static final Color DARK_SQUARE_COLOR = new Color(205, 133, 63);
private static final Color LIGHT_SQUARE_COLOR = new Color(245, 222, 179);
private static final int SQUARE_WIDTH = 16;
private static final int SQUARE_HEIGHT = 16;

public JavaExample() {
JFrame frame = new JFrame();
frame.add( new JPanel() {
private static final long serialVersionUID = 1L;

{
setPreferredSize(new Dimension(SQUARE_WIDTH * 8, SQUARE_HEIGHT * 8));
}

protected void paintComponent( Graphics g ) {
super.paintComponent(g);
for(int row = 0; row < 8; row++) {
for(int col = 0; col < 8; col++) {
g.setColor(getSquareColor(row, col));
g.fillRect(col * SQUARE_WIDTH, row * SQUARE_HEIGHT, SQUARE_WIDTH, SQUARE_HEIGHT);
}
}
}

private Color getSquareColor(int row, int col) {
return (row + col) % 2 == 0 ? LIGHT_SQUARE_COLOR : DARK_SQUARE_COLOR;
}
});

frame.pack();
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible( true );
}

public static void main(String [] args) {
new JavaExample();
}
}

最佳答案

这不是我第一次目睹这种行为,我非常确定这是 swing 中的一个错误。当在已经调用了 pack()JFrame 上调用 setResizable(false) 时,总会发生这种情况。

我知道的唯一解决方案是遵循以下调用的特定顺序:

  1. frame.setResizable(false);
  2. frame.setVisible(true);
  3. frame.pack();

关于java - JPanel setPreferredSize 向宽度和高度添加两个额外的像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41119369/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com