试图通过构造函数更好地理解 Swing 和 AWT,但现在我有一个关于构造函数的问题。
基于布尔值maximize是否为true我想设置一个具有相同值的新公共布尔变量。问题是我可能需要多个 JFrame,但如果为 true,则无法创建相同的公共变量名称。 如何使用基于动态字符串的名称实例化布尔值
public void setJframe(JFrame name, boolean maximize,) {
if (maximize == true){
name.setExtendedState(name.getExtendedState()|JFrame.MAXIMIZED_BOTH);
}
else {
name.setLocationRelativeTo(null);
}
}
额外澄清
在 if 部分,就像是如果远程可能的话。 括号旨在指示整个变量名称以及与字符串混合的反射内部
public boolean (getField(name) + "Max") = maximize;
我知道编译器以某种方式做事,只是如果我放在这里的内容没有反映出这一点,就不要把我活活吃掉。
Reflection 查看类和字段定义,并使您能够动态实例化类(通过变量名)。它不允许您动态定义字段或类。
正如 Hovercraft 所说,您可能需要一个 参考。
使用变量使您能够引用所需的对象,然后设置现有的“属性”/或应用您想要的行为。
例如:
public void setupJFrame (JFrame frame, boolean maximize) {
if (maximize) {
frame.setExtendedState( frame.getExtendedState()|JFrame.MAXIMIZED_BOTH);
} else {
frame.setLocationRelativeTo(null);
}
}
如果您需要知道“JFrame”处于什么状态,您可以将其子类化以添加存储该状态的属性,或者(也许更好)只创建一个“getter”或静态“getter”实用程序方法来回答这个问题使用它的现有状态。
public static boolean isFrameMaximized (JFrame frame) {
if ((frame.getExtendedState() & JFrame.MAXIMIZED_BOTH) == JFrame.MAXIMIZED_BOTH)
return true;
return false;
}