Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用自定义面板时可以使用setPreferredSize吗?_Java - Fatal编程技术网

Java 使用自定义面板时可以使用setPreferredSize吗?

Java 使用自定义面板时可以使用setPreferredSize吗?,java,Java,根据以前的经验,每个人都会说“不要使用那些setXxxSize方法!使用布局管理器!”但是,在这种情况下我该怎么办 import java.awt.*; import javax.swing.*; public class Game { public static void main(String[] args) { new Game(); } public Game() { JFrame f = new JFrame("Hi this

根据以前的经验,每个人都会说“不要使用那些
setXxxSize
方法!使用布局管理器!”但是,在这种情况下我该怎么办

import java.awt.*;
import javax.swing.*;

public class Game {
    public static void main(String[] args) {
        new Game();
    }
    public Game() {
        JFrame f = new JFrame("Hi this is a game");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.add(new GamePanel());
        f.pack(); 
        f.setVisible(true);
    }
    private class GamePanel extends JPanel {
        private GamePanel() {
            setPreferredSize(600, 600);
        }
        @Override
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            Graphics2D g2d = (Graphics2D)g;
            //paint stuff
        }
    }
}
这只是我快速拼凑的一些示例代码。当我需要制作游戏区域时,比如600乘600,我应该怎么做?在这里使用
setPreferredSize
可以吗?我不知道有哪种布局管理器可以只获取一个组件并给出其大小,即使有,使用它而不必使用整个布局管理器不是更容易吗

顺便说一下,
f.setSize(600600)
在这里不起作用,因为它考虑了框架装饰(标题栏、边框)


所以问题是,如果我只有一个需要特定大小的组件,我该怎么办?

游戏面板中覆盖
getPreferredSize

public Dimension getPreferredSize(){
    return new Dimension(600, 600);
}

覆盖
getPreferredSize
,在
GamePanel
中:

public Dimension getPreferredSize(){
    return new Dimension(600, 600);
}
为什么不仅仅是
设置PreferredSize()

As
Game
是一个
JPanel

  • 仅用于绘图

  • 包含默认布局,但不包含组件和

  • 有一个标准的UI委托

差别可以忽略不计。仍然有理由重写
getPreferredSize()

  • 对其他开发商来说,意图是明确的;演示和原型,就像僵尸一样,永远不会消失

  • 任何一个或所有这些条件都可能随着类的发展而改变

  • 这是一个惯用的提醒不要陷入困境

为什么不仅仅是
设置PreferredSize()

As
Game
是一个
JPanel

  • 仅用于绘图

  • 包含默认布局,但不包含组件和

  • 有一个标准的UI委托

差别可以忽略不计。仍然有理由重写
getPreferredSize()

  • 对其他开发商来说,意图是明确的;演示和原型,就像僵尸一样,永远不会消失

  • 任何一个或所有这些条件都可能随着类的发展而改变

  • 这是一个惯用的提醒不要陷入困境


?@trashgood是的,我看到了,但它并没有真正回答我的问题。如果我只有一个需要特定大小的组件,我该怎么办?
GamePanel
?@trashgood-oh-oops,
JPanel
?@trashgood是的,我看到了,但它并没有真正回答我的问题。如果我只有一个需要特定大小的组件,我该怎么办呢?
GamePanel
?@trashgood-oh-oops的预期超类是什么,
JPanel
基本上做的不是同样的事情吗?如果你想允许可变大小,你必须保留一个
首选的
引用,并根据需要进行更改,你说的“外部更改”是什么意思?我不需要可变大小,只需要600x600。
setPreferredsize()
什么都不做。如果你重写
getPreferredSize()
:)这不也是一回事吗?如果你想允许可变大小,你必须保留一个
首选
引用,根据需要更改它,然后返回它。你说的“从外部更改它”是什么意思?我不需要可变大小,只需要600x600。
setPreferredsize()
将什么都不做。如果覆盖
getPreferredSize()
:)