除了标签之外,如何在按钮上创建带有图像的JOptionPane?例如,如果我想要一个OK按钮上的复选标记和取消按钮上的x图标?如果不从头开始创建整个对话框作为JFrame / JPanel,这是否可行?
答案 0 :(得分:5)
JOptionPane.showOptionDialog()
有一个参数options
,它是一个Component
的数组。
您可以传递一组自定义按钮:
JOptionPane.showOptionDialog( parent, question, title,
JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE
new Component[]{ new JButton("OK", myIcon),
new JButton("cancel", myOtherIcon)
}
);
来自JOptionPane
的文档:
options - 指示用户可能选择的对象数组 可以使;如果对象是组件,则它们会正确呈现;
或者,您可以继承JOptionPane
,并直接更改组件及其布局。
答案 1 :(得分:2)
我在java 2 schools上发现了一个看起来稍微混乱的解决方案,它似乎实际上可以正常工作并响应按钮点击和动作监听器:
JFrame frame = new JFrame();
JOptionPane optionPane = new JOptionPane();
optionPane.setMessage("I got an icon and a text label");
optionPane.setMessageType(JOptionPane.INFORMATION_MESSAGE);
Icon icon = new ImageIcon("yourFile.gif");
JButton jButton = getButton(optionPane, "OK", icon);
optionPane.setOptions(new Object[] { jButton });
JDialog dialog = optionPane.createDialog(frame, "Icon/Text Button");
dialog.setVisible(true);
}
public static JButton getButton(final JOptionPane optionPane, String text, Icon icon) {
final JButton button = new JButton(text, icon);
ActionListener actionListener = new ActionListener() {
public void actionPerformed(ActionEvent actionEvent) {
// Return current text label, instead of argument to method
optionPane.setValue(button.getText());
System.out.println(button.getText());
}
};
button.addActionListener(actionListener);
return button;
}
答案 2 :(得分:1)
我有同样的问题。解决了此动作侦听器:
JButton ok = new JButton("OK");
ok.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Container parent = ok.getParent();
while (parent != null && !(parent instanceof JDialog)) {
parent = parent.getParent();
}
parent.setVisible(false);
}
});