gpt4 book ai didi

java - 如何让 JFrame 中的 JPanel 填满整个窗口?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:49:46 24 4
gpt4 key购买 nike

在下面的示例中,如何让 JPanel 占用所有 JFrame?我将首选大小设置为 800x420,但它实际上只能填充 792x391。

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.image.BufferStrategy;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class BSTest extends JFrame {
BufferStrategy bs;
DrawPanel panel = new DrawPanel();

public BSTest() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout()); // edited line
setVisible(true);
setSize(800,420);
setLocationRelativeTo(null);
setIgnoreRepaint(true);
createBufferStrategy(2);
bs = getBufferStrategy();
panel.setIgnoreRepaint(true);
panel.setPreferredSize(new Dimension(800,420));
add(panel, BorderLayout.CENTER); // edited line
panel.drawStuff();
}

public class DrawPanel extends JPanel {
public void drawStuff() {
while(true) {
try {
Graphics2D g = (Graphics2D)bs.getDrawGraphics();
g.setColor(Color.BLACK);
System.out.println("W:"+getSize().width+", H:"+getSize().height);
g.fillRect(0,0,getSize().width,getSize().height);
bs.show();
g.dispose();
Thread.sleep(20);
} catch (Exception e) { System.exit(0); }
}
}
}

public static void main(String[] args) {
BSTest bst = new BSTest();
}
}

最佳答案

如果框架中只有一个面板,没有其他面板,那么试试这个:

  • 在框架中设置 BorderLayout。
  • 使用 BorderLayout.CENTER 在框架中添加面板

这可能是由于 JPanel 中的 while 循环而发生的。(不确定为什么?找到真正的原因。找到它时会更新。)如果用 paintComponent(g) 方法替换它,一切正常很好:

public BSTest() {
//--- your code as it is
add(panel, BorderLayout.CENTER);
//-- removed panel.drawStuff();
}

public class DrawPanel extends JPanel {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.BLACK);
System.out.println("W:" + getSize().width + ", H:" + getSize().height);
g2d.fillRect(0, 0, getSize().width, getSize().height);
}
}

//your code as it is.

关于java - 如何让 JFrame 中的 JPanel 填满整个窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9441422/

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