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()
AsGame
是一个JPanel
即
- 仅用于绘图
- 包含默认布局,但不包含组件和
- 有一个标准的UI委托
差别可以忽略不计。仍然有理由重写getPreferredSize()
- 对其他开发商来说,意图是明确的;演示和原型,就像僵尸一样,永远不会消失
- 任何一个或所有这些条件都可能随着类的发展而改变
- 这是一个惯用的提醒不要陷入困境
为什么不仅仅是设置PreferredSize()
AsGame
是一个JPanel
即
- 仅用于绘图
- 包含默认布局,但不包含组件和
- 有一个标准的UI委托
差别可以忽略不计。仍然有理由重写getPreferredSize()
- 对其他开发商来说,意图是明确的;演示和原型,就像僵尸一样,永远不会消失
- 任何一个或所有这些条件都可能随着类的发展而改变
- 这是一个惯用的提醒不要陷入困境
?@trashgood是的,我看到了,但它并没有真正回答我的问题。如果我只有一个需要特定大小的组件,我该怎么办?GamePanel
?@trashgood-oh-oops,JPanel
?@trashgood是的,我看到了,但它并没有真正回答我的问题。如果我只有一个需要特定大小的组件,我该怎么办呢?GamePanel
?@trashgood-oh-oops的预期超类是什么,JPanel
基本上做的不是同样的事情吗?如果你想允许可变大小,你必须保留一个首选的
引用,并根据需要进行更改,你说的“外部更改”是什么意思?我不需要可变大小,只需要600x600。setPreferredsize()
什么都不做。如果你重写getPreferredSize()
:)这不也是一回事吗?如果你想允许可变大小,你必须保留一个首选
引用,根据需要更改它,然后返回它。你说的“从外部更改它”是什么意思?我不需要可变大小,只需要600x600。setPreferredsize()
将什么都不做。如果覆盖getPreferredSize()
:)