- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想设计一个看起来像 UWP 按钮的 Swing 按钮——像这样 [Windows 设置应用程序]:
这是我目前所拥有的:
使用以下代码:
Font f = new Font("Segoe UI", Font.PLAIN, 20);
Color gray = new Color(204, 204, 204);
button.setFont(f);
button.setBackground(gray);
button.setContentAreaFilled(false);
button.setFocusPainted(false);
button.setFocusable(false);
button.setForeground(Color.BLACK);
button.setBorder(BorderFactory.createEmptyBorder(10, 14, 10, 14));
无论 button.setContentAreaFilled(Boolean b);
属性是否设置为 false
或 true
,背景颜色根本无法更改,因为 EmptyBorder
继承了 Windows Swing 按钮的默认颜色。
当属性设置为 false
时,悬停(悬停时颜色变化)也会停止运行。
设置 button.setContentAreaFilled(true);
给出了以下结果,这也不理想,因为按钮的背景仍然没有从默认颜色更改(+它有轮廓):
我的问题基本上是:如何修改我的代码以获得以下类似 UWP 的设计?
默认:
悬停:
最佳答案
有很多方法你“可能”做到这一点,你可以
JButton
或 AbstractButton
扩展的新类,并在自包含包中提供您需要的核心功能/属性每种方法都有其优点和缺点,您需要决定哪种方法更能满足您的总体需求。
例如,在现有代码库中提供自定义外观委托(delegate)要容易得多,因为您无需更改代码,只需在需要时安装外观即可
下面是一个使用外观委托(delegate)的例子,这只是一个概念证明,可能还有很多额外的功能/工作需要完成——例如,我想提供更多例如,有关要使用的颜色和翻转边框的厚度的提示
import java.awt.Color;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javaapplication24.Test.MetroLookAndFeel;
import javax.swing.AbstractButton;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.border.Border;
import javax.swing.border.CompoundBorder;
import javax.swing.border.EmptyBorder;
import javax.swing.border.LineBorder;
import javax.swing.plaf.basic.BasicButtonUI;
public class Test {
public static void main(String[] args) {
new Test();
}
public Test() {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
public TestPane() {
setBorder(new EmptyBorder(10, 10, 10, 10));
JButton fancyPB = new JButton("Restart Now");
fancyPB.setUI(new MetroLookAndFeel());
JButton normalPB = new JButton("Restart Now");
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridwidth = GridBagConstraints.REMAINDER;
gbc.insets = new Insets(4, 4, 4, 4);
add(fancyPB, gbc);
add(normalPB, gbc);
}
}
public class MetroLookAndFeel extends BasicButtonUI {
// This could be computed properties, where the border color
// is determined based on other properties
private Border focusBorder = new CompoundBorder(new LineBorder(Color.DARK_GRAY, 3), new EmptyBorder(7, 13, 7, 14));
private Border unfocusedBorder = new EmptyBorder(10, 14, 10, 14);
@Override
protected void installDefaults(AbstractButton b) {
super.installDefaults(b);
Font f = new Font("Segoe UI", Font.PLAIN, 20);
Color gray = new Color(204, 204, 204);
b.setFont(f);
b.setBackground(gray);
b.setContentAreaFilled(false);
b.setFocusPainted(false);
// This seems like an oddity...
b.setFocusable(false);
b.setForeground(Color.BLACK);
// b.setBorder(BorderFactory.createEmptyBorder(10, 14, 10, 14));
b.setBorder(unfocusedBorder);
}
@Override
protected void installListeners(AbstractButton b) {
super.installListeners(b);
b.addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) {
((JButton)e.getSource()).setBorder(focusBorder);
}
@Override
public void mouseExited(MouseEvent e) {
((JButton)e.getSource()).setBorder(unfocusedBorder);
}
});
}
}
}
关于java - Swing:创建一个 UWP ("Metro")–like 按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46448044/
有没有办法将 Dapper 包含在 Metro 应用程序中? 它依赖于 WinRT 中遗漏的 System.Data。 如果没有,是否有任何类似的框架可以使用? 最佳答案 Is there any w
我想为 Windows 8 Embedded Standard(发布预览版)创建一个自定义 shell(WinForms),允许用户运行、安装或更新应用程序(可以是桌面和/或 Metro 应用程序)。
我需要使用 c++ (WINRT/Metro) 在我的应用程序中生成唯一的临时文件名。如我所见,Win32 API GetTempFileName标记为仅在桌面上使用。 Metro 风格应用程序的等价
我想检索登录用户的用户名。是否可以?该应用程序仅用于内联网。 最佳答案 要将 Windows 身份验证添加到应用程序,请声明 'enterpriseAuthentication' capability
Metro UI 不支持多重绑定(bind)吗? 还是只是还没有添加? 最佳
我有公钥模数和公钥指数,我需要在 Metro 风格应用程序中生成公钥和加密数据。在 C# 中,我们有 RSAParameters 类,但我找不到任何适用于 Metro 风格应用程序的此类内容。 当我使
我从某人那里收到了一个项目,其中包括一个带有一些传感器和灯的 Arduino (Uno) 板,带有 USB 电缆以及用于通过 COM 端口与该板通信的文档化协议(protocol)。它适用于一些现有代
我正在尝试使用 Windbg 调试 C++ Metro 应用程序。由于 Windbg 在桌面上执行,应用程序在调试 session 5 秒后暂停,我必须切换回 Metro Desktop 以恢复应用程
任何人都可以建议我如何在 MahApps Metro 布局中实现图 block 的拖放。谢谢.. 最佳答案 我们使用 punker76 的另一个库取得了成功。 它轻量级且易于实现! GitHub ht
我想为我的 Android 应用程序设计 Metro 风格的 UI。怎么做?有什么捷径吗?我尝试使用 ImageView 制作一个。如何为其赋予效果?还有其他方法吗?请帮助我.... 最佳答案 试试
我看到 Metro 应用已更名为“Windows 8 应用”或“Windows 应用商店应用”。 是否有独立于通过其商店发布的工作流程的全屏应用程序风格的术语?你能构建一个可以直接安装的 Window
我正在开发一个应用程序,它将一些文件下载到本地存储进行缓存。在线文件有时位于 3 或 4 个嵌套文件夹中,我也想将此层次结构保留在我的缓存文件夹中。 除了 (await (await folder.G
我正在开发一个 Office 加载项,并想添加一个 WPF Mahapps Windows。 一切顺利,但我无法应用 Mahapps Windows 样式。 看教程here我看到我更新了 App.xa
我正在开发一个 Office 加载项,并想添加一个 WPF Mahapps Windows。 一切顺利,但我无法应用 Mahapps Windows 样式。 看教程here我看到我更新了 App.xa
如何获取Windows应用商店应用(Metro应用)中的唯一设备? 我们可以使用: Windows.System.Profile.HardwareIdentification.GetPackageSp
我正在执行 http GET 来获取数据,我正在使用 IXMLHTTPRequest2。 如果我 GET url "http://foo.com"(curl "http://foo.com") ,第二
我正在使用 Javascript 和 HTML 构建 Windows Metro 应用程序,但它崩溃了 HierarchyRequestError : Exception was thrown but
我正在创建一个简单的 metro 应用程序。我也在创建同一个应用的非 Metro 版本。 我面临的问题是 VS 不允许我将普通类库引用到 Metro 应用程序中,也不允许我将 Metro 类库引用到普
我正在尝试捆绑 markdown 文件而不产生太多开销(即不将它们手动添加到 Xcode 和 Android Studio 中的 Assets 包,不使用第 3 方依赖项)。 我的想法是允许 requ
能否在 Windows 8 上基于 C# XAML 的 Metro 应用程序中嵌入 IE Web 浏览器控件?另外,这样做时 HTML/Javascript 是否可以拥有 Windows 8 HTML
我是一名优秀的程序员,十分优秀!