Java 从外观上使用标准按钮

Java 从外观上使用标准按钮,java,swing,Java,Swing,我正在用Swing制作一个UI,我希望自定义对话框中使用的按钮与标准对话框中的按钮具有相同的样式 例如,在附加的图像中,我有一个自定义对话框和标准文件选择对话框。我希望“文件选择”对话框中的“确定”和“取消”按钮用于自定义对话框中的等效按钮 我希望我的应用程序使用它运行的任何操作系统的默认系统外观,所以我不想尝试手动重新创建这些标准按钮。使用自动提供这些按钮的更严格的Swing类也不会起作用,因为我想在UI中其他更奇特的地方也使用它们 这个问题有简单的解决办法吗 JButton.setUI(Bu

我正在用Swing制作一个UI,我希望自定义对话框中使用的按钮与标准对话框中的按钮具有相同的样式

例如,在附加的图像中,我有一个自定义对话框和标准文件选择对话框。我希望“文件选择”对话框中的“确定”和“取消”按钮用于自定义对话框中的等效按钮

我希望我的应用程序使用它运行的任何操作系统的默认系统外观,所以我不想尝试手动重新创建这些标准按钮。使用自动提供这些按钮的更严格的Swing类也不会起作用,因为我想在UI中其他更奇特的地方也使用它们

这个问题有简单的解决办法吗

JButton.setUI(ButtonUI)只为一个JButton设置UI。与工厂一起使用:

public static JButton createStyledButton(String text) {
   JButton button = new JButton(text);
   button.setUI(STYLE_UI);
   return button;
}    

很抱歉成为坏消息的传递者,但似乎没有标准的跨平台方法。默认按钮上的行为、助记符和图标由每个外观以非常特定的方式处理

下面是一个SO问题,它回答了关于如何设置的问题(默认按钮是使用
getRootPane().setDefaultButton(…)
设置的,取消按钮需要一个自定义键盘侦听器。如果你非常幸运,设置默认按钮可能会添加一个图标,具体取决于UI的编码方式


UIManager
。每个LaF都有一组UI默认值,例如颜色、文本、边框和图标。在所有LaF中都有许多默认图标,但对于非标准图标,例如按钮上的图标,则没有任何保证。但是,如果您告诉我您在提供的屏幕截图中使用的LaF,我可以查找其自定义UI类使用的资源键(如果您有源代码,也可以自己查找)。然后,您可以编写一个帮助器方法,通过这些键查找图标,并在找到图标时将其添加到按钮。

这并不能回答他的问题。标准jfilechooser小部件中的“取消”和“确定”按钮与其自定义对话框之间的区别在于应用了图标和mmnemonics。我已经在如图所示,系统的外观正在使用中。我感兴趣的是在我的应用程序的其他地方使用一些用于该系统外观的按钮的标准设计,而不是试图通过使用带有文本+图像的JButton来重新构建它们。@Oliver我用自定义样式的按钮ui编辑了答案pe这将有助于解决您的需求。感谢您提供的信息。在屏幕截图中,我使用的是system LaF for Ubuntu,但这个问题的希望是,我能够让程序使用运行在任何平台上的system LaF,并且在每一个平台上都显得相当原生。因为没有简单的方法可以做到这一点,我将尝试手动使用让它在各种平台上看起来都正常,或者只选择一个LaF并在所有平台上使用它……您真正能做的就是使用UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName())哪一个将在当前操作系统上使用最合适的LaF。即使如此,“本地性”的确切级别取决于实现,因此它永远不会是完美的。祝你好运!