Java 在JFrame内对齐活动渲染的JPanel
有人能解释为什么pack()不能在这个JFrame上工作吗 它内部有一个JPanel(实际上,是一个扩展JPanel-Java 在JFrame内对齐活动渲染的JPanel,java,rendering,jframe,jpanel,bufferedimage,Java,Rendering,Jframe,Jpanel,Bufferedimage,有人能解释为什么pack()不能在这个JFrame上工作吗 它内部有一个JPanel(实际上,是一个扩展JPanel-内部的类) 以下是我使用的代码: inner.setPreferredSize(new Dimension(800, 600)); add(inner); pack(); setResizable(false); setLocationRelativeTo(null); // to center the JFrame on screen setDefaultCloseOperat
内部的类)
以下是我使用的代码:
inner.setPreferredSize(new Dimension(800, 600));
add(inner);
pack();
setResizable(false);
setLocationRelativeTo(null); // to center the JFrame on screen
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
额外的空间似乎是JFrame装饰的确切宽度和高度(即JFrame的尺寸减去JPanel的尺寸)
在pack()之前调用setresizeable(false)
。“额外的空间似乎就是JFrame
装饰的确切宽度和高度,这并非巧合。”
附录:这表明我最初的猜测是错误的
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
/** @see http://stackoverflow.com/questions/7924830 */
public class NonResizable extends JPanel {
public NonResizable() {
this.setPreferredSize(new Dimension(400, 300));
this.setBackground(Color.lightGray);
this.setBorder(BorderFactory.createLineBorder(Color.blue));
}
private void display() {
JFrame f = new JFrame("NonResizable");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setLayout(new FlowLayout());
f.setBackground(Color.white);
f.add(this);
f.pack();
f.setResizable(false);
f.setLocationRelativeTo(null);
f.setSize(500, 400);
f.setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new NonResizable().display();
}
});
}
}
在pack()之前调用setresizeable(false)
。“额外的空间似乎就是JFrame
装饰的确切宽度和高度,这并非巧合。”
附录:这表明我最初的猜测是错误的
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
/** @see http://stackoverflow.com/questions/7924830 */
public class NonResizable extends JPanel {
public NonResizable() {
this.setPreferredSize(new Dimension(400, 300));
this.setBackground(Color.lightGray);
this.setBorder(BorderFactory.createLineBorder(Color.blue));
}
private void display() {
JFrame f = new JFrame("NonResizable");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setLayout(new FlowLayout());
f.setBackground(Color.white);
f.add(this);
f.pack();
f.setResizable(false);
f.setLocationRelativeTo(null);
f.setSize(500, 400);
f.setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new NonResizable().display();
}
});
}
}
原来我是从JFrame而不是JPanel中绘制(活动渲染)的。。。因此,额外的空间是JPanel的draw()对象在0,0(在JFrame中)对齐的结果
解决方法。原来我是从JFrame而不是JPanel中绘制(活动渲染)的。。。因此,额外的空间是JPanel的draw()对象在0,0(在JFrame中)对齐的结果
解决方法。额外的空间在JFrame的底部和右侧以灰色显示。如果对比度太低,我可以发布另一张图像。您是否尝试切换设置未装饰(布尔v)
?我希望保留装饰。但是,如果你好奇,未修饰的窗口的大小更准确(尽管奇怪的是,根据我的测量,只有几个像素)。“我可以发布另一个图像。”在你考虑之前,请检查提示,特别是关于“ALT+PrimT屏蔽”和400 X300的建议,当它显示效果时!AndrewThompson我发布的截图有什么问题吗?额外的空间在JFrame的底部和右侧以灰色显示。如果对比度太低,我可以发布另一张图像。您是否尝试切换设置未装饰(布尔v)
?我希望保留装饰。但是,如果你好奇,未修饰的窗口的大小更准确(尽管奇怪的是,根据我的测量,只有几个像素)。“我可以发布另一个图像。”在你考虑之前,请检查提示,特别是关于“ALT+PrimT屏蔽”和400 X300的建议,当它显示效果时!AndrewThompson我发布的截图有什么问题吗?如果没有帮助,请提供一个显示您描述的问题的示例。它删除了部分空间,但不是全部空间。我将致力于建立一个sscce。我最初的猜测是错误的;我在上面添加了一个示例。如果这没有帮助,请提供一个演示您描述的问题的示例。它删除了部分空间,但不是全部空间。我将致力于建立一个sscce。我最初的猜测是错误的;我在上面添加了一个示例。