不同的外观和感觉是否能够使用不同的初始组件属性?
Are different look and feels able to use different initial component properties?
当我们创建一个组件时,该组件会采用一些初始值,并且会根据活动设置相应的样式 Look & Feel
。例如,JButton
将以等于 0 的水平对齐方式开始(可能是 SwingConstants.CENTER
)。
我的问题是,这些外观是否能够 "change-override" 默认组件的这些初始值(我不是在谈论 NimbusButton extends JButton
)。同样,我指的只是所有组件都具有的这种属性,而不是样式和它们的外观(即使其中一些属性会影响组件的外观)。
我已经用 Java 的外观、我的系统的外观 (Windows 10) 和 Nimbus 测试了以前的值 (JButton.horizontalAlignment
)。该值似乎保持不变。 但是其他 LAF 或来自其他组件的其他值呢?
可以说,我的问题也可以表达为 "What look and feels are able to change"?
public class LookAndFeels {
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
// No look and feel
System.out.println(new JButton().getHorizontalAlignment());
// Nimbus
setNimbusLAF();
System.out.println(new JButton().getHorizontalAlignment());
setSystemLAF();
System.out.println(new JButton().getHorizontalAlignment());
});
}
private static void setSystemLAF() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException
| UnsupportedLookAndFeelException e) {
e.printStackTrace();
}
}
private static void setNimbusLAF() {
try {
for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
这个问题没有完整的答案(相信我,当我说它太复杂时,我正在从头开始实施,现在已经 4 个月了,我什至不知道我是否接近打电话它!)。
My question is, are these look and feels able to "change-override" these initial values of the default components
是也不是,他们可以更改此类属性,但他们有责任尊重他们。
加上大多数初始值首先显示外观值,here this will give you a hint about what happend at your first println
真正的答案是检查 ComponentUI
您所问问题的实施情况。
你是一名编码员,所以当你发现他们可以更改的内容与原始包之外的任何代码相同时,你并不感到震惊(因为代码就是代码!!)。
I have tested the previous value (JButton.horizontalAlignment) with Java's look and feel, my system's look and feel (Windows 10) and Nimbus. The value seems to remain the same. But what about other L&F's, or other values from other Components?
每个 ui 对象都有一个名为 installUI(JComponent c)
的方法,这个问题的答案围绕着这个方法,当您更改 ui 时会调用此方法,具体取决于它们的实现,他们更改了一些属性以满足他们的需要(例如,以任何深色 L&F 为例,AbstractButton
ui 的实现必须将背景设置为深色,将前景设置为明亮颜色,以便显示文本,因为它们是深色的)。
"What look and feels are able to change"
许多人认为 ui 控制了一小部分组件,但实际上它全部来自 ui!例如 AbstractButton
有文本,许多人认为 ui 不负责显示它,但它是相反的!,如果 ui 没有调用 Graphics.drawString(AbstractButton.getText(),x,y)
(或者 equivalent) 在他们的 paint(Graphics g,JComponent c)
方法中的某处没有文本
所以对你的问题的简短回答 'every thing on the screen' .
当我们创建一个组件时,该组件会采用一些初始值,并且会根据活动设置相应的样式 Look & Feel
。例如,JButton
将以等于 0 的水平对齐方式开始(可能是 SwingConstants.CENTER
)。
我的问题是,这些外观是否能够 "change-override" 默认组件的这些初始值(我不是在谈论 NimbusButton extends JButton
)。同样,我指的只是所有组件都具有的这种属性,而不是样式和它们的外观(即使其中一些属性会影响组件的外观)。
我已经用 Java 的外观、我的系统的外观 (Windows 10) 和 Nimbus 测试了以前的值 (JButton.horizontalAlignment
)。该值似乎保持不变。 但是其他 LAF 或来自其他组件的其他值呢?
可以说,我的问题也可以表达为 "What look and feels are able to change"?
public class LookAndFeels {
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
// No look and feel
System.out.println(new JButton().getHorizontalAlignment());
// Nimbus
setNimbusLAF();
System.out.println(new JButton().getHorizontalAlignment());
setSystemLAF();
System.out.println(new JButton().getHorizontalAlignment());
});
}
private static void setSystemLAF() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException
| UnsupportedLookAndFeelException e) {
e.printStackTrace();
}
}
private static void setNimbusLAF() {
try {
for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
这个问题没有完整的答案(相信我,当我说它太复杂时,我正在从头开始实施,现在已经 4 个月了,我什至不知道我是否接近打电话它!)。
My question is, are these look and feels able to "change-override" these initial values of the default components
是也不是,他们可以更改此类属性,但他们有责任尊重他们。 加上大多数初始值首先显示外观值,here this will give you a hint about what happend at your first println
真正的答案是检查 ComponentUI
您所问问题的实施情况。
你是一名编码员,所以当你发现他们可以更改的内容与原始包之外的任何代码相同时,你并不感到震惊(因为代码就是代码!!)。
I have tested the previous value (JButton.horizontalAlignment) with Java's look and feel, my system's look and feel (Windows 10) and Nimbus. The value seems to remain the same. But what about other L&F's, or other values from other Components?
每个 ui 对象都有一个名为 installUI(JComponent c)
的方法,这个问题的答案围绕着这个方法,当您更改 ui 时会调用此方法,具体取决于它们的实现,他们更改了一些属性以满足他们的需要(例如,以任何深色 L&F 为例,AbstractButton
ui 的实现必须将背景设置为深色,将前景设置为明亮颜色,以便显示文本,因为它们是深色的)。
"What look and feels are able to change"
许多人认为 ui 控制了一小部分组件,但实际上它全部来自 ui!例如 AbstractButton
有文本,许多人认为 ui 不负责显示它,但它是相反的!,如果 ui 没有调用 Graphics.drawString(AbstractButton.getText(),x,y)
(或者 equivalent) 在他们的 paint(Graphics g,JComponent c)
方法中的某处没有文本
所以对你的问题的简短回答 'every thing on the screen' .