`

修改Button的边框

阅读更多

在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组件的边框设置

    button的边框是用:after方式实现的,用户如果在button上定义边框会出现两条线,需用:after的方式去覆盖默认值。如果设置了Button的背景色,没有用:after设置边框的颜色,则button的四个角会出现模糊的尖角。如下图所...

    wpf button去掉虚边框

    这种方式适用于单个Button控件的修改。 #### 3.2 使用样式资源 如果需要在整个应用程序中统一处理所有Button控件,则可以在App.xaml或者单独的资源文件中定义样式资源: ```xml ...

    自绘Button 修改Button背景

    "自绘Button 修改Button背景"这个标题表明我们将探讨如何利用`WM_DRAWITEM`消息来改变Button的默认外观。 `WM_DRAWITEM`是Windows消息系统中的一个关键消息,它在窗口控件(如Button)需要被绘制时发送。当用户界面...

    openLayers修改button图标样式

    /* 可能需要调整其他样式,如大小、边框等 */ } ``` 3. **关联新样式**:将`displayClass`属性设置为你刚刚创建的新类名,例如`displayClass: "myCustomButton"`。这样,OpenLayers按钮将使用你定义的新样式。 ...

    Android项目实战--手机卫士06--GridView的优化与修改Button的显示样式

    接下来,我们谈谈如何修改Button的显示样式。在Android中,Button是用户交互的重要元素,其样式可以自定义以匹配应用的整体设计风格。以下是一些定制方法: 1. XML布局中定义样式:在res/layout文件夹下的XML布局...

    C++重绘button按钮控件,支持设置背景色,边框色,扁平化

    本文将深入探讨如何使用C++来重绘button按钮控件,使其支持自定义背景色、边框色以及实现扁平化设计。 首先,我们需要理解C++中的控件重绘机制。在Windows API或Qt等图形库中,按钮控件通常有自己的默认样式。为了...

    android -> 按钮 圆角 & 边框 & 渐变

    打开`activity_main.xml`或其他相关布局文件,修改`Button`标签,添加`background`属性: ```xml &lt;Button android:id="@+id/myButton" android:layout_width="wrap_content" android:layout_height="wrap_...

    MFC重绘Button为圆形。

    MFC中重绘Button为圆形Button,可以修改背景颜色、文本颜色、边框颜色等。

    android 自定义各种风格button

    首先,我们可以通过修改Button的背景来改变其颜色。Android提供了多种方式来实现这一目标,例如使用颜色资源、颜色选择器(ColorStateList)或者渐变色。在"AndroidGradients"这个文件夹中,我们可以看到可能包含了...

    WPFButton样式

    默认样式可以通过修改`&lt;Style TargetType="Button"&gt;`进行全局调整。 2. **自定义背景和边框**: 开发者可以使用`&lt;SolidColorBrush&gt;`定义按钮的背景颜色,用`&lt;Border&gt;`标签定义边框颜色、宽度和圆角。例如: ```...

    好看的button样式

    通过分析和修改这些代码,开发者可以深入理解CSS的工作原理,提升自己的前端技能。 对于初学者,了解CSS选择器、盒模型、颜色理论、文本和边框属性等基础知识至关重要。而对于经验丰富的开发者,这些样式可能提供了...

    SplitButton 分裂按钮 WPF

    你可以修改SplitButton的默认模板以改变其外观。这通常涉及到使用`ControlTemplate`和`Style`元素。例如,你可以改变按钮的背景色、边框样式、下拉箭头的形状等。 5. **数据绑定** SplitButton的`Content`和`...

    android线程 Handler Message Queue AsyncTask线程模型 线程交互 + 修改Button样式 示例 最终easy整合版

    同时,我们将关注如何修改Button的样式,并通过一个实际案例来整合这些知识点。 首先,我们来了解Handler。Handler是Android中处理消息和调度任务的主要工具,它工作在主线程(UI线程)中。当需要在后台线程执行完...

    微信小程序中button组件的边框设置的实例详解

    从修改后的效果来看,`button`的四个角变得更加清晰,没有了模糊的现象。 此外,当`button`组件有背景色时,如果不使用`:after`设置边框颜色,可能会出现模糊的尖角,这是因为背景色与边框颜色不同步,产生了视觉上...

    java swing 边框事件

    这允许你在不修改原有代码的情况下添加新的功能或行为。 总的来说,Java Swing的边框事件处理是通过组合边框、添加监听器以及适当地使用布局管理器来实现的。理解和熟练运用这些概念可以极大地提升Swing应用的用户...

    微信小程序中button去除默认的边框实例代码

    本文将详细解析如何通过CSS样式去除微信小程序中button的默认边框,并提供了实例代码供开发者参考。 首先,我们要了解微信小程序中button组件的默认CSS样式,这些样式定义了按钮的基本样式,包括尺寸、颜色、边框等...

    按钮边框流光特效

    // 修改动画持续时间 }); ``` 在这个例子中,当用户点击按钮时,动画速度将变为0.5秒。 在实际项目中,"按钮边框流光特效"可以结合各种设计模式和配色方案,以适应不同的产品风格。例如,可以调整动画的速度、方向...

    WPF异步定时发送验证码 同时修改button的style样式

    至于修改按钮的样式,WPF允许我们创建自定义的样式并应用到控件上。可以在XAML中定义`Style`,根据按钮的不同状态(如是否启用、是否正在倒计时)设置不同的属性。以下是一个简单的示例: ```xml ...

    虚线边框去除

    如果需要在JavaScript中动态改变边框,可以获取元素的样式对象并修改`borderStyle`属性: ```javascript const button = document.querySelector('button'); button.style.borderStyle = 'none'; ``` 6. **...

    ASP.net开发经典button样式

    2. **样式修改**:为了改变Button的外观,我们可以利用CSS来定制样式。首先,为Button控件添加`CssClass`属性,然后在CSS文件中定义相应的类。例如: ```asp &lt;asp:Button ID="btnClassic" runat="server" Text=...

Global site tag (gtag.js) - Google Analytics