gpt4 book ai didi

java - JPanel 和 JFrame 大小不同

转载 作者:行者123 更新时间:2023-12-01 18:28:34 29 4
gpt4 key购买 nike

在下面的代码中,我创建一个 JFrame,将大小设置为 800 x 800 像素,将布局设置为 BorderLayout,然后添加一个 JPanel.

JPanel 中,我使用 paintComponent 在 7 个位置绘制 20x20 像素的图像。在位置 0-0 处,图标出现在右上角。

图标的高度为 20 像素,框架和面板的高度均为 800 像素,因此在 x-780 处绘制图标应将图标与窗口底部对齐。但图标甚至没有出现。

其余图标绘制为 x-770、x-760、x-758 和 x-750。 x-758 显示与窗口底部对齐。所以我得出结论,JPanel 上的 x[0] 从 JFrame 的 x[42]

开始

我认为我已经正确设置了 BorderLayout。我确实在 JPanel 的构造函数中调用了 setSize() 。我认为设置明确的大小可能会搞砸。但是在注释掉该行之后,程序显示了相同的行为。

你能告诉我我做错了什么吗?

Frametest.java

package frametest;
import java.awt.BorderLayout;
import javax.swing.JFrame;

public class FrameTest extends JFrame{
public static final int HEIGHT = 800;
public static final int WIDTH = 800;

public FrameTest(){
setLayout(new BorderLayout());
add(new Panel(WIDTH, HEIGHT), BorderLayout.CENTER);
pack();
setTitle("Frame Test");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(WIDTH, HEIGHT);
setResizable(false);
setLocationRelativeTo(null);
setVisible(true);
}

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

Panel.java

package frametest;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JPanel;

public class Panel extends JPanel{
private int height;
private int width;
Image icon1 = new ImageIcon(this.getClass().getResource("icon1.png")).getImage(); //Note that the png file is 20 x 20 pixels.

public Panel(int width, int hieght){
setBackground(Color.BLUE);
//setSize(width, hieght);
}

public void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(icon1, 0, 0, this); //appears in the upper-right corner
g2d.drawImage(icon1, 20, 780, this); //does not appear
g2d.drawImage(icon1, 40, 770, this); //appears with bottom pixels cut off
g2d.drawImage(icon1, 70, 760, this); //appears with the bottom pixels cut off
g2d.drawImage(icon1, 100, 758, this); //appears aligned with bottom of the window
g2d.drawImage(icon1, 130, 750, this); //appears slightly above the bottom of the window
g2d.drawImage(icon1, 780, 20, this); //appears aligned with the right side of the screen.
}
}

最佳答案

您正在设置 JFrame 的大小。这包括框架装饰、菜单栏(如果有的话)等等。如果您希望 JPanel 的尺寸为 800 x 800,请设置 JPanel 的首选大小并使用 JFrame.pack()

为此,请从 Frametest.java 中删除以下行:

setSize(WIDTH, HEIGHT);

然后,在 Panel.java 中,更改此行

//setSize(width, hieght);

至:

setPreferredSize(new Dimension(800, 800));

除此之外,您还可以覆盖 getPreferredSize():

public Dimension getPreferredSize ()
{
return new Dimension(800, 800);
}

关于java - JPanel 和 JFrame 大小不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25145047/

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