自定义JButton与图形的计算器实现

时间:2014-07-14 04:40:56

标签: java swing graphics jbutton

我正在尝试将计算器编程为尽可能接近 Windows 7/8 模型,我正在尝试提供{{1}自定义外观,但它没有按计划进行。我的按钮被称为Jbutton,它扩展了CalculatorButton。我目前正在使用JButton绘制边框并使其比标准Graphics边框更圆,但它似乎只适用于一个JButton实例,而不是随后创建的实例。

另请原谅不良格式,这是我的第一篇文章。

下面是calculatorbutton类

CalculatorButton

下面是计算器类

import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Insets;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.border.Border;

public class CalculatorButton extends JButton {

    CalculatorButton() {
        super();
        this.setFont(new Font("Segoe UI",Font.PLAIN,12));
        this.setOpaque(false);
        this.setFocusPainted(false);
    }

    CalculatorButton(String text) {
        super(text);
        this.setFont(new Font("Segoe UI",Font.PLAIN,12));
        this.setOpaque(false);
        this.setFocusPainted(false);
        this.setContentAreaFilled(false);
    }

    protected void paintBorder(Graphics g) {
        g.setColor(new Color(144,158,171));
        g.drawLine(getX()+1,getY(),getX()+getWidth()-2,getY());
        g.drawLine(getX()+1,getY()+getHeight()-1,getX()+getWidth()-2,getY()+getHeight()-1);
        g.drawLine(getX(),getY()+1,getX(),getY()+getHeight()-2);
        g.drawLine(getX()+getWidth()-1,getY()+1,getX()+getWidth()-1,getY()+getHeight()-2);
    }   
}

2 个答案:

答案 0 :(得分:2)

首先,所有绘画都是在当地环境中完成的。也就是说,Graphics上下文被转换为组件位置(x / y)。

这意味着左上角实际为0x0,右下角为width - 1 x height - 1

其次,您应考虑制作符合您需求的paintBorder,而不是覆盖Border。边框不仅仅是绘画,它们还提供有关所需额外空间的重要信息

答案 1 :(得分:2)

扩展BasicButtonUI class

查看this.

等示例

但有更好的方法,请使用css styling of JavaFX

相关问题