1

根据以往的经验,每个人都会说“不要使用那些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 x 600,我应该怎么做?在这里可以使用setPreferredSize吗?我不知道有任何布局管理器可以只采用单个组件并为其指定大小,即使有,使用它而不是使用整个布局管理器不是更容易吗?

顺便说一句,f.setSize(600, 600)在这里不起作用,因为它考虑了框架装饰(标题栏,边框的东西)。

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

4

2 回答 2

4

覆盖getPreferredSize,在GamePanel

public Dimension getPreferredSize(){
    return new Dimension(600, 600);
}
于 2012-12-11T02:01:46.190 回答
1

为什么要这样做而不只是这样做setPreferredSize()

就像那样Game_JPanel

  • 仅用于绘图,

  • 包含默认布局但没有组件,并且

  • 有一个标准的 UI 委托,

差异可以忽略不计。仍有理由推翻getPreferredSize()

  • 其他开发人员的意图很清楚;演示和原型,就像僵尸一样,永远不会消失。

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

  • 这是一个惯用的提醒,不要落入这个陷阱

于 2012-12-11T02:33:54.567 回答