我想用WIDTH和HEIGHT在
的枚举中声明来设置frame的大小setSize (dimension.getValue (), dimension.getValue ());
,但是当我进行测试时,我在输出中收到的不是枚举值,而是枚举的基数顺序,在这种情况下为{1,2}。我如何改变我的代码返回正确的值?
public enum Dimension {
WIDTH(700), HEIGHT(400);
private final int value;
private Dimension(int value) {
this.value = value;
}
public int getValue(){
return value;
}
}
public class MainFrame extends JFrame {
private Dimension dimension;
public static void main(String[] args) {
final MainFrame mainFrame = new MainFrame();
mainFrame.setVisible(true);
}
public MainFrame() {
initGameFrame();
}
private void initGameFrame() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(dimension.getValue(), dimension.getValue());
add(gamePanel);
setResizable(false);
setUndecorated(true);
pack();
setLocationRelativeTo(null);
}
}
你的问题标题是:
从枚举字段获取值
但这是您的问题:您没有从enum 字段中获得值。你应该使用:
Dimension.WIDTH.getValue()
Dimension.HEIGHT.getValue()
,
Dimension.getValue()
有完全不同的意思
作为题外话,我自己会避免在任何地方调用setSize(...)
,而是使用我的组件的首选大小。如果一个需要精确指定或由公式指定,那么我将重写它的getPreferredSize()
方法。
另一方面,我将避免给类、接口或枚举命名与核心Java类名冲突。例如,我将Dimension重命名为GuiDimension或类似的内容。
编辑
注意这个enum:
public enum Fubar {
FOO, BAR
}
信息面板。FOO和Fubar。BAR不是"静态字段"。它们是枚举Fubar的常量实例。我想你可能对这个概念感到困惑。
编辑2
你的状态:
好吧,我必须更好地解释我的问题,你不明白…我知道enum高度和宽度不是静态成员,但如果你把它们放在任何类,你想要这两个字段被其他类使用,肯定要初始化私有静态int高度= 400 ....为了防止这种情况,我采用了enum。
- 我仍然不明白是什么阻止你直接使用枚举实例,正如我在这个答案的开头所发布的。
- 对象的状态由其字段的状态定义,可以与其他对象共享,而无需将任何字段设置为静态。这就是getter方法的作用。
- 您没有提到为什么其他类需要知道这些字段的值。这里可能有XY问题。
我的问题是,我无法访问这些枚举
的值
再次,这是令人困惑的。其值可如上所述,Dimension.WIDTH.getValue()
和Dimension.HEIGHT.getValue()
。你的问题表明,你觉得你必须传递一个实例变量,不能直接使用枚举,这就引出了为什么的问题。