如何将JFrame制作成一定大小,不包括边框?

时间:2011-10-15 08:12:58

标签: java swing size jframe

我有一个JFrame,我使用setBounds将其设置为一定的大小。然而,这使得窗口(包括边框)的大小(事后才能完全理解)。但我想要的是窗口的大小,比如,800x600 加上边框。这很重要,因为我从JFrame中的BufferStategy绘制了一个Graphics对象,但是当使用小于20的y值时,我一直在标题栏下绘图。我想象不同的操作系统(甚至不同的操作系统设置)也可以有不同的厚度边框。之后我认为边框只是贴在窗户上,但情况似乎并非如此。

那么,无论边框的厚度如何,如何使边框内的空间达到一定的大小?另外,为了让我的生活更轻松,我如何让点0,0成为框架可视内容的左上角?

顺便说一句,使用setUndecorated会提出它自己的问题,所以我现在还没有尝试过。

6 个答案:

答案 0 :(得分:16)

  1. 设置内容窗格的首选大小。
  2. 打包框架。
  3. 工作完成。
  4. E.G。

    Fixed Size Content

    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();
    // ....
}