【问题标题】:Aligning an actively-rendered JPanel inside a JFrame [closed]在 JFrame 中对齐主动渲染的 JPanel [关闭]
【发布时间】:2011-10-28 03:26:13
【问题描述】:

谁能解释为什么 pack() 在这个 JFrame 上不起作用?

里面有一个 JPanel(实际上是一个扩展 JPanel 的类 - inner)。

这是我正在使用的代码:

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 的尺寸)。

【问题讨论】:

  • 多余的空间在 JFrame 的底部和右侧以灰色显示。如果对比度太低,我可以再发一张。
  • 你试过切换setUndecorated(boolean v)吗?
  • 我想保留装饰。但如果你好奇的话,未装饰窗口的大小会更准确(不过,奇怪的是,根据我的测量,偏差了几个像素)。
  • “我可以再发一张图片。” 在考虑之前,请查看How do I create ScreenShots? 中的提示,尤其是关于“alt+printscreen”和 400x300 时的提示显示效果!
  • @AndrewThompson 我贴的截图有问题吗?

标签: java rendering jframe jpanel bufferedimage


【解决方案1】:

调用setResizable(false) 之前 pack()。 “额外的空间似乎是JFrame 装饰的确切宽度和高度”,这绝非巧合。

附录:这是一个sscce,表明我最初的猜测是错误的。

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

【讨论】:

  • 如果这没有帮助,请提供一个 sscce 来说明您描述的问题。
  • 它删除了一些空间,但不是全部。我会一起努力获得一个 sscce。
  • 我最初的猜测是错误的;我在上面添加了一个示例。
【解决方案2】:

原来我是从 JFrame 而不是 JPanel 绘制(主动渲染)...所以额外的空间是 JPanel 的 draw() 对象在 0,0 对齐的结果(在 JFrame 中)。

this post解决。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-24
    • 2014-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多