我需要知道需要设置的ui manager属性,以便在JTextField
窗口中为JOptionPane.showInputDialog
更改字体。
答案 0 :(得分:4)
一个技巧是使确认对话框看起来像输入对话框。请注意,此示例的行为与标准输入对话框的行为方式不同,默认情况下未选择输入字段。为此,我总是发现本文中关于Dialog Focus的提示非常宝贵。
以下显示了使用大字体与确认对话框相比较的标准输入对话框。
import java.awt.*;
import javax.swing.*;
class BigInputOptionPane {
public static void main(String[] args) {
Runnable r = new Runnable() {
@Override
public void run() {
String s = JOptionPane.showInputDialog(null);
if (s!=null) {
System.out.println("User chose: " + s);
} else {
System.out.println("User did not chose an option!");
}
JTextField tf = new JTextField(8);
tf.setFont(tf.getFont().deriveFont(26f));
int result = JOptionPane.showConfirmDialog(
null, tf, "Input",
JOptionPane.OK_CANCEL_OPTION);
if (result==JOptionPane.OK_OPTION) {
System.out.println("User chose: " + tf.getText());
} else {
System.out.println("User did not chose an option!");
}
}
};
SwingUtilities.invokeLater(r);
}
}
答案 1 :(得分:4)
这对我有用,可以改变JOptionPane中文本和按钮的字体:
Font font = new Font(Font.SANS_SERIF,Font.PLAIN,20);
UIManager.put(" OptionPane.messageFont",font);
UIManager.put(" OptionPane.buttonFont",font);
答案 2 :(得分:2)
我相信你想要TextField.font
。这将返回当前安装的外观所有JTextField
的默认使用的字体...
更好的解决方案可能是为您自己的JTextField
设置您想要使用的字体。
例如......
(抱歉,更新,使用了错误的对话框:P)
import java.awt.EventQueue;
import java.awt.Font;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class TestOptionPane09 {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
JTextField field = new JTextField("Hello");
field.setFont(field.getFont().deriveFont(Font.BOLD, 24));
String[] options = {"Ok", "Cancel"};
int result = JOptionPane.showOptionDialog(
null,
field,
"Help",
JOptionPane.OK_CANCEL_OPTION,
JOptionPane.QUESTION_MESSAGE,
null,
options,
0);
switch (result) {
case 0:
System.out.println("Okay");
break;
case 1:
System.out.println("Cancel");
break;
}
}
});
}
}
答案 3 :(得分:2)
这是我们使用的方式:
UIManager.put("OptionPane.messageFont", new Font("Arial", Font.BOLD, 14));
UIManager.put("OptionPane.buttonFont", new Font("Arial", Font.PLAIN, 12));
只需记住在任何JOptionPane对话框出现之前设置它。我只是将它放在main
方法的第一行。
要知道为什么我这样做,UIManager的DOC总是有用的。
默认值
UIManager管理三套UIDefaults。按顺序,它们是:
开发者默认值。除了少数例外,Swing不会改变开发者默认值;这些是供开发人员修改和使用的。
外观和默认情况。外观和默认设置由安装时的外观提供,因为当前外观(调用setLookAndFeel())。可以使用getLookAndFeelDefaults()方法获取外观默认值。
系统默认值。系统默认值由Swing提供。 调用任何各种get方法会导致检查每个默认值,然后返回第一个非null值。例如,调用UIManager.getString(“Table.foreground”)会导致首先检查开发人员默认值。如果开发人员默认值包含“Table.foreground”的值,则返回该值,否则将检查外观默认值,然后检查系统默认值。 重要的是要注意getDefaults返回UIDefaults的自定义实例,其中内置了此解析逻辑。例如,UIManager.getDefaults()。getString(“Table.foreground”)等同于UIManager.getString(“Table.foreground”)。两者都使用刚刚描述的算法解析。在许多地方,文档使用单词defaults来引用UIDefaults的自定义实例,其解析逻辑如前所述。
因此,我们应该首先更改开发人员默认值。方法UIManager.put(Object key, Object value)
是要使用的方法。
public static Object put(Object key,Object value)
在开发人员默认值中存储对象。这是getDefaults()。put(key,value)的封面方法。这仅影响开发人员默认值,而不影响系统或外观默认值。
参数:
key - 指定检索关键字的对象
value - 要存储的对象;有关如何处理null的详细信息,请参阅UIDefaults
返回:UIDefaults.put返回的Object(java.lang.Object,java.lang.Object)
抛出:
NullPointerException - 如果key为null
这正是我正在寻找的:没有额外的面板,没有更多的问题覆盖JOptionPane
的默认用户界面。
JOptionPane
中的属性名称的完整列表位于:
http://www.java2s.com/Tutorial/Java/0240__Swing/CustomizingaJOptionPaneLookandFeel.htm
Property String Object Type
OptionPane.actionMap ActionMap
OptionPane.background Color
OptionPane.border Border
OptionPane.buttonAreaBorder Border
OptionPane.buttonClickThreshhold Integer
OptionPane.buttonFont Font
OptionPane.buttonOrientation Integer
OptionPane.buttonPadding Integer
OptionPane.cancelButtonMnemonic String
OptionPane.cancelButtonText String
OptionPane.cancelIcon Icon
OptionPane.errorDialog.border.background Color
OptionPane.errorDialog.titlePane.background Color
OptionPane.errorDialog.titlePane.foreground Color
OptionPane.errorDialog.titlePane.shadow Color
OptionPane.errorIcon Icon
OptionPane.errorSound String
OptionPane.font Font
OptionPane.foreground Color
OptionPane.informationIcon Icon
OptionPane.informationSound String
OptionPane.inputDialogTitle String
OptionPane.isYesLast Boolean
OptionPane.messageAnchor Integer
OptionPane.messageAreaBorder Border
OptionPane.messageFont Font
OptionPane.messageForeground Color
OptionPane.messageDialogTitle String
OptionPane.minimumSize Dimension
OptionPane.noButtonMnemonic String
OptionPane.noButtonText String
OptionPane.noIcon Icon
OptionPane.okButtonMnemonic String
OptionPane.okButtonText String
OptionPane.okIcon Icon
OptionPane.questionDialog.border.background Color
OptionPane.questionDialog.titlePane.background Color
OptionPane.questionDialog.titlePane.foreground Color
OptionPane.questionDialog.titlePane.shadow Color
OptionPane.questionIcon Icon
OptionPane.questionSound String
OptionPane.sameSizeButtons Boolean
OptionPane.separatorPadding Integer
OptionPane.setButtonMargin Boolean
OptionPane.titleText String
OptionPane.warningDialog.border.background Color
OptionPane.warningDialog.titlePane.background Color
OptionPane.warningDialog.titlePane.foreground Color
OptionPane.warningDialog.titlePane.shadow Color
OptionPane.warningIcon Icon
OptionPane.warningSound String
OptionPane.windowBindings Object[ ]
OptionPane.yesButtonMnemonic String
OptionPane.yesButtonText String
OptionPane.yesIcon Icon
OptionPaneUI String
答案 4 :(得分:0)
这是在2018年8月使用Java 1.8.0_181使我字体更大并因此在我的4K笔记本电脑显示器上更具可读性的功能。在调用如下对话框之前,我先在main顶部附近调用它:
String menuChoice = JOptionPane.showInputDialog(null, "some prompt", "Menu", JOptionPane.INFORMATION_MESSAGE);
它与以前的答案非常接近,但是略有不同,因为它包含了我在先前的答复中没有看到的设置:
/**
* Changes the font size used in JOptionPane.showInputDialogs to make them more ADA
* section 508 compliant by making the text size larger,
* which is very nice for older people and anyone else with vision problems.
*/
private static void makeDialogsEasierToSee() {
// This next one is very strange; but, without it,
// any subsequent attempt to set InternalFrame.titleFont will
// be ignored, so resist the temptation to remove it.
JDialog.setDefaultLookAndFeelDecorated(true);
Font normalFont = new Font(Font.MONOSPACED, Font.PLAIN, 24);
Font boldFont = normalFont.deriveFont(Font.BOLD);
UIManager.put("OptionPane.font", normalFont);
UIManager.put("OptionPane.messageFont", normalFont);
UIManager.put("OptionPane.buttonFont", normalFont);
UIManager.put("TextField.font", normalFont);
UIManager.put("InternalFrame.titleFont", boldFont);
}