在TinyLookAndFeel.java 的 protected void initComponentDefaults(UIDefaults table) 方法中设置
table.put("Button.border",
new BorderUIResource.CompoundBorderUIResource(
new TinyButtonBorder(),
new BasicBorders.MarginBorder()));
TinyButtonBorder是继承AbstractBorder.java和实现UIResource.java 的类
public class TinyButtonBorder extends AbstractBorder implements UIResource {
protected final Insets borderInsets = new Insets(2, 2, 2, 2);
/**
* Draws the button border for the given component.
*
* @param mainColor The component to draw its border.
* @param g The graphics context.
* @param x The x coordinate of the top left corner.
* @param y The y coordinate of the top left corner.
* @param w The width.
* @param h The height.
*/
public void paintBorder(Component c, Graphics g, int x, int y, int w, int h) {
switch (Theme.derivedStyle[Theme.style]) {
case Theme.TINY_STYLE :
drawTinyBorder(c, g, x, y, w, h);
break;
case Theme.W99_STYLE :
drawWinBorder(c, g, x, y, w, h);
break;
case Theme.YQ_STYLE :
drawXpBorder(c, g, x, y, w, h);
break;
}
}
private void drawTinyBorder(Component c, Graphics g, int x, int y, int w, int h) {
}
private void drawWinBorder(Component c, Graphics g, int x, int y, int w, int h) {
AbstractButton b = (AbstractButton)c;
boolean isDefault = (c instanceof JButton) && (((JButton)c).isDefaultButton());
if(b.getModel().isPressed() ||
((b instanceof JToggleButton) && b.isSelected()))
{
g.setColor(Color.BLACK);
g.drawRect(0, 0, w - 1, h - 1);
g.setColor(Theme.buttonDarkColor[Theme.style].getColor());
g.drawRect(1, 1, w - 3, h - 3);
return;
}
else if(isDefault && b.isEnabled()) {
g.setColor(Theme.buttonDefaultColor[Theme.style].getColor());
g.drawRect(0, 0, w - 1, h - 1);
x += 1; y += 1; w -= 1; h -= 1;
}
if(!b.isEnabled()) {
g.setColor(Theme.buttonLightDisabledColor[Theme.style].getColor());
}
else {
g.setColor(Theme.buttonLightColor[Theme.style].getColor());
}
g.drawLine(x, y, w - 2, y);
g.drawLine(x, y + 1, x, h - 2);
if(!b.isEnabled()) {
g.setColor(Theme.buttonBorderDisabledColor[Theme.style].getColor());
}
else {
g.setColor(Theme.buttonBorderColor[Theme.style].getColor());
}
g.drawLine(x, h - 1, w - 1, h - 1);
g.drawLine(w - 1, y, w - 1, h - 1);
if(!b.isEnabled()) {
g.setColor(Theme.buttonDarkDisabledColor[Theme.style].getColor());
}
else {
g.setColor(Theme.buttonDarkColor[Theme.style].getColor());
}
g.drawLine(x + 1, h - 2, w - 2, h - 2);
g.drawLine(w - 2, y + 1, w - 2, h - 2);
}
private void drawXpBorder(Component c, Graphics g, int x, int y, int w, int h) {
AbstractButton b = (AbstractButton)c;
boolean isDefault = (c instanceof JButton) && (((JButton)c).isDefaultButton());
boolean isComboBoxButton =
Boolean.TRUE.equals(b.getClientProperty("isComboBoxButton"));
if(isComboBoxButton) {
if (!b.isEnabled()) {
DrawRoutines.drawRoundedBorder(
g, Theme.comboBorderDisabledColor[Theme.style].getColor(), x, y, w, h);
}
else {
DrawRoutines.drawRoundedBorder(
g, Theme.comboBorderColor[Theme.style].getColor(), x, y, w, h);
if(b.getModel().isPressed()) return;
if(b.getModel().isRollover() && Theme.comboRollover[Theme.style]) {
DrawRoutines.drawRolloverBorder(
g, Theme.buttonRolloverColor[Theme.style].getColor(), x, y, w, h);
}
}
}
else { // it's a normal JButton or a JSpinner button
boolean isSpinnerButton =
Boolean.TRUE.equals(b.getClientProperty("isSpinnerButton"));
boolean paintRollover =
(isSpinnerButton && Theme.spinnerRollover[Theme.style]) ||
(!isSpinnerButton && Theme.buttonRollover[Theme.style]);
if (!b.isEnabled()) {
DrawRoutines.drawRoundedBorder(
g, Theme.buttonBorderDisabledColor[Theme.style].getColor(), x, y, w, h);
}
else {
DrawRoutines.drawRoundedBorder(
g, Theme.buttonBorderColor[Theme.style].getColor(), x, y, w, h);
if(b.getModel().isPressed()) return;
if(b.getModel().isRollover() && paintRollover) {
DrawRoutines.drawRolloverBorder(
g, Theme.buttonRolloverColor[Theme.style].getColor(), x, y, w, h);
}
else if(isDefault ||
(Theme.buttonFocusBorder[Theme.style] && b.isFocusOwner()))
{
DrawRoutines.drawRolloverBorder(
g, Theme.buttonDefaultColor[Theme.style].getColor(), x, y, w, h);
}
}
}
}
/**
* Gets the border insets for a given component.
*
* @param c The component to get its border insets.
* @return Always returns the same insets as defined in <code>insets</code>.
*/
public Insets getBorderInsets(Component c) {
return borderInsets;
}
}
分享到:
相关推荐
button的边框是用:after方式实现的,用户如果在button上定义边框会出现两条线,需用:after的方式去覆盖默认值。如果设置了Button的背景色,没有用:after设置边框的颜色,则button的四个角会出现模糊的尖角。如下图所...
这种方式适用于单个Button控件的修改。 #### 3.2 使用样式资源 如果需要在整个应用程序中统一处理所有Button控件,则可以在App.xaml或者单独的资源文件中定义样式资源: ```xml ...
"自绘Button 修改Button背景"这个标题表明我们将探讨如何利用`WM_DRAWITEM`消息来改变Button的默认外观。 `WM_DRAWITEM`是Windows消息系统中的一个关键消息,它在窗口控件(如Button)需要被绘制时发送。当用户界面...
/* 可能需要调整其他样式,如大小、边框等 */ } ``` 3. **关联新样式**:将`displayClass`属性设置为你刚刚创建的新类名,例如`displayClass: "myCustomButton"`。这样,OpenLayers按钮将使用你定义的新样式。 ...
接下来,我们谈谈如何修改Button的显示样式。在Android中,Button是用户交互的重要元素,其样式可以自定义以匹配应用的整体设计风格。以下是一些定制方法: 1. XML布局中定义样式:在res/layout文件夹下的XML布局...
本文将深入探讨如何使用C++来重绘button按钮控件,使其支持自定义背景色、边框色以及实现扁平化设计。 首先,我们需要理解C++中的控件重绘机制。在Windows API或Qt等图形库中,按钮控件通常有自己的默认样式。为了...
打开`activity_main.xml`或其他相关布局文件,修改`Button`标签,添加`background`属性: ```xml <Button android:id="@+id/myButton" android:layout_width="wrap_content" android:layout_height="wrap_...
MFC中重绘Button为圆形Button,可以修改背景颜色、文本颜色、边框颜色等。
首先,我们可以通过修改Button的背景来改变其颜色。Android提供了多种方式来实现这一目标,例如使用颜色资源、颜色选择器(ColorStateList)或者渐变色。在"AndroidGradients"这个文件夹中,我们可以看到可能包含了...
默认样式可以通过修改`<Style TargetType="Button">`进行全局调整。 2. **自定义背景和边框**: 开发者可以使用`<SolidColorBrush>`定义按钮的背景颜色,用`<Border>`标签定义边框颜色、宽度和圆角。例如: ```...
通过分析和修改这些代码,开发者可以深入理解CSS的工作原理,提升自己的前端技能。 对于初学者,了解CSS选择器、盒模型、颜色理论、文本和边框属性等基础知识至关重要。而对于经验丰富的开发者,这些样式可能提供了...
你可以修改SplitButton的默认模板以改变其外观。这通常涉及到使用`ControlTemplate`和`Style`元素。例如,你可以改变按钮的背景色、边框样式、下拉箭头的形状等。 5. **数据绑定** SplitButton的`Content`和`...
同时,我们将关注如何修改Button的样式,并通过一个实际案例来整合这些知识点。 首先,我们来了解Handler。Handler是Android中处理消息和调度任务的主要工具,它工作在主线程(UI线程)中。当需要在后台线程执行完...
从修改后的效果来看,`button`的四个角变得更加清晰,没有了模糊的现象。 此外,当`button`组件有背景色时,如果不使用`:after`设置边框颜色,可能会出现模糊的尖角,这是因为背景色与边框颜色不同步,产生了视觉上...
这允许你在不修改原有代码的情况下添加新的功能或行为。 总的来说,Java Swing的边框事件处理是通过组合边框、添加监听器以及适当地使用布局管理器来实现的。理解和熟练运用这些概念可以极大地提升Swing应用的用户...
本文将详细解析如何通过CSS样式去除微信小程序中button的默认边框,并提供了实例代码供开发者参考。 首先,我们要了解微信小程序中button组件的默认CSS样式,这些样式定义了按钮的基本样式,包括尺寸、颜色、边框等...
// 修改动画持续时间 }); ``` 在这个例子中,当用户点击按钮时,动画速度将变为0.5秒。 在实际项目中,"按钮边框流光特效"可以结合各种设计模式和配色方案,以适应不同的产品风格。例如,可以调整动画的速度、方向...
至于修改按钮的样式,WPF允许我们创建自定义的样式并应用到控件上。可以在XAML中定义`Style`,根据按钮的不同状态(如是否启用、是否正在倒计时)设置不同的属性。以下是一个简单的示例: ```xml ...
如果需要在JavaScript中动态改变边框,可以获取元素的样式对象并修改`borderStyle`属性: ```javascript const button = document.querySelector('button'); button.style.borderStyle = 'none'; ``` 6. **...
2. **样式修改**:为了改变Button的外观,我们可以利用CSS来定制样式。首先,为Button控件添加`CssClass`属性,然后在CSS文件中定义相应的类。例如: ```asp <asp:Button ID="btnClassic" runat="server" Text=...