Java UIManager处于按钮操作状态
我有一个Java UIManager处于按钮操作状态,java,paint,joptionpane,uimanager,Java,Paint,Joptionpane,Uimanager,我有一个LoginScreen和一个main窗口。当数据库连接尝试成功时,LoginScreendisposed和Main窗口出现 我有一个按钮有ActionListener,用于创建JOptionPane。代码实际上成功地工作了。我想我在绘画方面有三个问题。让我逐一解释问题 问题1 UIManager UI=new UIManager(); Object paneBG = UI.get("OptionPane.background"); Object panelBG = UI.get("Pan
LoginScreen
和一个main窗口
。当数据库连接尝试成功时,LoginScreendisposed
和Main窗口出现
我有一个按钮有ActionListener
,用于创建JOptionPane
。代码实际上成功地工作了。我想我在绘画方面有三个问题。让我逐一解释问题
问题1强>
UIManager UI=new UIManager();
Object paneBG = UI.get("OptionPane.background");
Object panelBG = UI.get("Panel.background");
UI.put("OptionPane.background", Color.red);
UI.put("Panel.background", Color.red);
String[] buttons2 = { "EXIT", "OK" };
int rc2 = JOptionPane.showOptionDialog(MainWindow.this,
panel,
"User Input",
JOptionPane.INFORMATION_MESSAGE,
JOptionPane.PLAIN_MESSAGE,
icon,
buttons2,
buttons2[1]
);
UI.put("OptionPane.background", paneBG);
UI.put("Panel.background", panelBG);
我使用上述代码更改选项窗格
的背景色
,向用户显示并将UI颜色回滚为原始颜色
如果我直接运行main窗口
并单击按钮,颜色会发生变化(确保面板和按钮区域在OptionPane中保持原始颜色,但其他OptionPane区域会变为红色。这是另一个问题),如下所示
但当我从LoginScreen
登录时,登录尝试成功,LoginScreen已处理
并出现主窗口。我点击同一个按钮,但是现在没有画,像这样
问题2强>
UIManager UI=new UIManager();
Object paneBG = UI.get("OptionPane.background");
Object panelBG = UI.get("Panel.background");
UI.put("OptionPane.background", Color.red);
UI.put("Panel.background", Color.red);
String[] buttons2 = { "EXIT", "OK" };
int rc2 = JOptionPane.showOptionDialog(MainWindow.this,
panel,
"User Input",
JOptionPane.INFORMATION_MESSAGE,
JOptionPane.PLAIN_MESSAGE,
icon,
buttons2,
buttons2[1]
);
UI.put("OptionPane.background", paneBG);
UI.put("Panel.background", panelBG);
我在主窗口中有另一个按钮,它创建了另一个选项窗格。我直接运行主窗口,单击第一个按钮(它更改了UI颜色和回滚操作),关闭它,然后单击第二个按钮(它有另一个选项面板)选项窗格(仍然绘制),这样UI颜色就不会回滚到默认值
问题3强>
UIManager UI=new UIManager();
Object paneBG = UI.get("OptionPane.background");
Object panelBG = UI.get("Panel.background");
UI.put("OptionPane.background", Color.red);
UI.put("Panel.background", Color.red);
String[] buttons2 = { "EXIT", "OK" };
int rc2 = JOptionPane.showOptionDialog(MainWindow.this,
panel,
"User Input",
JOptionPane.INFORMATION_MESSAGE,
JOptionPane.PLAIN_MESSAGE,
icon,
buttons2,
buttons2[1]
);
UI.put("OptionPane.background", paneBG);
UI.put("Panel.background", panelBG);
如果我们解决了第一个和第二个问题,我如何使
透明
这些内部面板(有标签和文本字段面板一个和按钮一个)首先,UIManager的公共方法是静态的。创建UIManager实例是不正确的、误导性的,也是毫无意义的。调用这些方法的正确方法是:
UIManager.put("OptionPane.background", Color.red);
其次,您可能不应该使用全局设置来更改颜色,尤其是动态更改。相反,通过创建JOptionPane的实际实例而不是使用静态便利方法来设置相关对象的颜色:
static void setBackground(Component c,
Color color) {
if (c instanceof JTextField || c instanceof AbstractButton) {
return;
}
c.setBackground(color);
if (c instanceof Container) {
Component[] children = ((Container) c).getComponents();
for (Component child : children) {
setBackground(child, color);
}
}
}
int show(Icon icon,
JComponent panel) {
String[] buttons2 = { "EXIT", "OK" };
JOptionPane optionPane = new JOptionPane(panel,
JOptionPane.PLAIN_MESSAGE,
JOptionPane.DEFAULT_OPTION,
icon,
buttons2,
buttons2[1]);
setBackground(optionPane, Color.RED);
optionPane.createDialog(MainWindow.this, "User Input").setVisible(true);
Object value = optionPane.getValue();
int rc2 = JOptionPane.CLOSED_OPTION;
if (value instanceof String) {
rc2 = Arrays.asList(buttons2).indexOf(value);
}
return rc2;
}
您需要小心区分消息类型参数和选项类型参数。将信息消息和普通消息作为参数传递是不正确的。声明第四和第五个参数分别是选项类型和消息类型;选项类型参数应为默认选项、确定取消选项、是否选项等。如果重复使用同一对话框,为什么不创建自定义的
JDialog
?因为我需要为JDialog中的每个按钮编写ActionListener。我认为OptionPane很容易使用。实际上,我需要在选项窗格上绘制渐变。如果我不能解决这些问题,我会求助于JDialog,然后发布一个。请确保将您的代码复制粘贴到新项目中,并确保在将其发布到此处之前编译并运行。既然您请求“输入”,为什么要使用“showOptionDialog”而不是“showInputDialog”?此示例非常有指导性和帮助性。我还可以在这个示例中添加一些东西,以便使用GradientPaint绘制OptionPane。