我有一个JFrame,我使用setBounds将其设置为一定的大小。然而,这使得窗口(包括边框)的大小(事后才能完全理解)。但我想要的是窗口的大小,比如,800x600 加上边框。这很重要,因为我从JFrame中的BufferStategy绘制了一个Graphics对象,但是当使用小于20的y值时,我一直在标题栏下绘图。我想象不同的操作系统(甚至不同的操作系统设置)也可以有不同的厚度边框。之后我认为边框只是贴在窗户上,但情况似乎并非如此。
那么,无论边框的厚度如何,如何使边框内的空间达到一定的大小?另外,为了让我的生活更轻松,我如何让点0,0成为框架可视内容的左上角?
顺便说一句,使用setUndecorated会提出它自己的问题,所以我现在还没有尝试过。
答案 0 :(得分:16)
E.G。
import java.awt.*;
import javax.swing.*;
class FixedSizeContent {
public static void main(String[] args) {
SwingUtilities.invokeLater( new Runnable() {
public void run() {
JFrame f = new JFrame("Fixed size content");
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
Container c = f.getContentPane();
c.setBackground(Color.YELLOW);
// adjust to need.
Dimension d = new Dimension(400,40);
c.setPreferredSize(d);
f.pack();
f.setResizable(false);
f.setVisible(true);
}
});
}
}
答案 1 :(得分:7)
让绘图组件将图形的大小报告为其首选
@Override
public Dimension getPreferredSize() {
return new Dimension(myDrawing.getWidth(), myDrawing.getHeight());
}
然后关注@Andrew的子弹2和3
答案 2 :(得分:6)
这很重要,因为我从JFrame中的BufferStategy绘制了一个Graphics对象,
为什么使用BufferStrategy。这是旧的AWT代码。默认情况下,Swing是双缓冲的。
在Swing中进行自定义绘制时,应该扩展JPanel(或JComponent),然后覆盖paintComponent()方法。您将此组件添加到框架的内容窗格中。然后,如果你遵循kleopatra的建议你就不会有问题。
有关更多信息和示例,请参阅Custom Painting上Swing教程中的部分。
答案 3 :(得分:2)
您可以使用它来避免使用容器。
JFrame f=new JFrame("Your title");
Dimension d=new Dimension();
d.setSize(x,y);
f.setSize(d);
答案 4 :(得分:0)
创建Canvas canvas = new Canvas();
和add(canvas);
到JFrame
,
创建canvas.createBufferStrategy(2);
获取BufferStrategy bs = canvas.getBufferStrategy();
创建Graphics2D graphics2D = (Graphics2D) bufferStrategy.getDrawGraphics();
使用graphics2D
绘制到BufferedImage
。
在屏幕bufferStrategy.show();
向所有种类的canvas
添加控件......
尝试graphics2D.translate(x,y)
将画布移动到某个位置
根据窗口边缘测量插入插图......
答案 5 :(得分:0)
我为我的项目找到了解决方案。它是一个很老的线程,也许有人想要代码。试试这个
public gfx_CFrame(String _Title, int _Height, int _Width)
{
super(_Title);
Dimension Dim = new Dimension(_Width, _Height);
setMaximumSize(Dim);
setMinimumSize(Dim);
setPreferredSize(Dim);
pack();
Dim.width = _Width + (getWidth() - getContentPane().getWidth());
Dim.height = _Height + (getHeight() - getContentPane().getHeight());
setMaximumSize(Dim);
setMinimumSize(Dim);
setPreferredSize(Dim);
pack();
// ....
}