Java swing: 当我在JOptionPane中改变我的背景颜色时如何解决这个问题?
Java swing: How to solve this problem when I change my background color in JOptionPane?
- 更改 JOptionPane 的背景颜色时,无法如图所示更改文本的背景颜色?!
存在问题的图片
和
- 还有,如何更改确定按钮的背景颜色和字体颜色??
注意:我已经尝试了很多解决方案,但其中 none 有效。
这是代码:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
UIManager.put("OptionPane.buttonFont", new Font("Arial", PLAIN, 30));
JOptionPane pane = new JOptionPane("<html><b style=\"color:RED; font-size:20px;\">login successful</b></html>",
JOptionPane.INFORMATION_MESSAGE,
JOptionPane.DEFAULT_OPTION,
ChangeIconJoptionPane("/photo/icons8_Done_70px.png", 60, 60));
getComponents(pane);
pane.setBackground(new Color(32, 139, 223));
JDialog jd = pane.createDialog(this, "Success");
jd.setVisible(true);
}
JOptionPane 由许多组件组成。您需要为所有这些设置背景。
下面是遍历整个组件树的简单方法:
private static Stream<Component> walk(Component root) {
Stream<Component> stream = Stream.of(root);
if (root instanceof Container) {
Component[] children = ((Container) root).getComponents();
stream = Stream.concat(
Arrays.stream(children).flatMap(c -> walk(c)), stream);
}
return stream;
}
private void jButton1ActionPerformed(ActionEvent evt) {
JOptionPane pane = new JOptionPane(
"<html><b style=\"color:RED; font-size:20px;\">login successful</b></html>",
JOptionPane.INFORMATION_MESSAGE,
JOptionPane.DEFAULT_OPTION,
ChangeIconJoptionPane("/photo/icons8_Done_70px.png", 60, 60));
Color background = new Color(32, 139, 223);
walk(pane).forEach(c -> c.setBackground(background));
}
但是... 在某些 look-and-feels 中,无法更改 JButton 的背景颜色。 Windows 和 Mac 的系统 look-and-feels 将忽略 JButton 的背景 属性,并始终使用系统设置呈现按钮。
自定义确定按钮最可靠的方法是自己创建按钮,并将其作为选项值传递给 JOptionPane:
private void jButton1ActionPerformed(ActionEvent evt) {
JButton okButton = new JButton("OK");
Font font = okButton.getFont();
font = font.deriveFont(font.getSize2D() * 1.5f);
okButton.setFont(font);
JOptionPane pane = new JOptionPane(
"<html><b style=\"color:RED; font-size:20px;\">login successful</b></html>",
JOptionPane.INFORMATION_MESSAGE,
JOptionPane.DEFAULT_OPTION,
ChangeIconJoptionPane("/photo/icons8_Done_70px.png", 60, 60),
new Object[] { okButton });
okButton.addActionListener(e -> pane.setValue(JOptionPane.OK_OPTION));
Color background = new Color(32, 139, 223);
walk(pane).forEach(c -> c.setBackground(background));
}
- 更改 JOptionPane 的背景颜色时,无法如图所示更改文本的背景颜色?!
存在问题的图片
和
- 还有,如何更改确定按钮的背景颜色和字体颜色??
注意:我已经尝试了很多解决方案,但其中 none 有效。
这是代码:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
UIManager.put("OptionPane.buttonFont", new Font("Arial", PLAIN, 30));
JOptionPane pane = new JOptionPane("<html><b style=\"color:RED; font-size:20px;\">login successful</b></html>",
JOptionPane.INFORMATION_MESSAGE,
JOptionPane.DEFAULT_OPTION,
ChangeIconJoptionPane("/photo/icons8_Done_70px.png", 60, 60));
getComponents(pane);
pane.setBackground(new Color(32, 139, 223));
JDialog jd = pane.createDialog(this, "Success");
jd.setVisible(true);
}
JOptionPane 由许多组件组成。您需要为所有这些设置背景。
下面是遍历整个组件树的简单方法:
private static Stream<Component> walk(Component root) {
Stream<Component> stream = Stream.of(root);
if (root instanceof Container) {
Component[] children = ((Container) root).getComponents();
stream = Stream.concat(
Arrays.stream(children).flatMap(c -> walk(c)), stream);
}
return stream;
}
private void jButton1ActionPerformed(ActionEvent evt) {
JOptionPane pane = new JOptionPane(
"<html><b style=\"color:RED; font-size:20px;\">login successful</b></html>",
JOptionPane.INFORMATION_MESSAGE,
JOptionPane.DEFAULT_OPTION,
ChangeIconJoptionPane("/photo/icons8_Done_70px.png", 60, 60));
Color background = new Color(32, 139, 223);
walk(pane).forEach(c -> c.setBackground(background));
}
但是... 在某些 look-and-feels 中,无法更改 JButton 的背景颜色。 Windows 和 Mac 的系统 look-and-feels 将忽略 JButton 的背景 属性,并始终使用系统设置呈现按钮。
自定义确定按钮最可靠的方法是自己创建按钮,并将其作为选项值传递给 JOptionPane:
private void jButton1ActionPerformed(ActionEvent evt) {
JButton okButton = new JButton("OK");
Font font = okButton.getFont();
font = font.deriveFont(font.getSize2D() * 1.5f);
okButton.setFont(font);
JOptionPane pane = new JOptionPane(
"<html><b style=\"color:RED; font-size:20px;\">login successful</b></html>",
JOptionPane.INFORMATION_MESSAGE,
JOptionPane.DEFAULT_OPTION,
ChangeIconJoptionPane("/photo/icons8_Done_70px.png", 60, 60),
new Object[] { okButton });
okButton.addActionListener(e -> pane.setValue(JOptionPane.OK_OPTION));
Color background = new Color(32, 139, 223);
walk(pane).forEach(c -> c.setBackground(background));
}