制作一个可定制的自定义JButton?

时间:2014-02-14 02:54:56

标签: java swing

我想创建自己的自定义按钮(或者有一个模板来创建我自己的自定义按钮)。如果我希望它看起来相同,我需要覆盖哪些方法来制作与JButton相同大小的按钮。因为我认为如果你将JButton扩展到另一个按钮类,一个自定义按钮,它具有与JButton相同的大小和外观。但是当我把按钮放在表格上时,它会变得很小,看起来不像普通的按钮。

我想要的是至少拥有与JButton相同的按钮。但是我也希望在前景和背景中添加边框,文字和颜色?我需要覆盖的所有方法是什么,有没有人有一个简单的例子?

班级:(JButton) - 我的按钮

import javax.swing.JButton;

public class DougCustomButton extends JButton {
    DougCustomButton() {
        super();
    setBorder(BorderFactory.createLineBorder(Color.BLUE));    
    }

    @Override
    public void setPreferredSize(int a, int b) {
        //What would I put in here, do I need super()
    }
 }

班级:(JPanel)

import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JPanel;

public class genericPanel2 extends JPanel {
    private static final long serialVersionUID = 1L;
    DougCustomButton b2 = new DougCustomButton();

    public genericPanel2() {
        add(b2);
        setPreferredSize(new Dimension(50, 30));
    }
}

类:(JFrame)

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class genericFrame2 {
    Dimension dimension = new Dimension(450,450);
    JFrame f = new JFrame("Not resizable");
    genericPanel2 genericPanel = new genericPanel2();

    public static boolean RIGHT_TO_LEFT = false;

    public genericFrame2() {
        initUI();
    }

    public static void addComponentsToPane(Container pane) {

    }

    public final void initUI() {
        f.add(genericPanel);
        f.setSize(dimension);
        f.setResizable(true);
        f.setLocationRelativeTo(null);
        f.setTitle("Draw Line Test");
        //addComponentsToPane(f.getContentPane());
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public static void main(String[] args) {
        genericFrame2 ex = new genericFrame2();
        ex.f.setVisible(true);
    }
}

屏幕截图:

我的自定义按钮是像素的大小?可能导致什么原因?

enter image description here

2 个答案:

答案 0 :(得分:1)

您可以在常规Border上设置JButton,就像其他JComponent一样 - 或许添加像

这样的构造函数
public DougCustomButton() {
  super();
  setBorder(BorderFactory.createLineBorder(Color.BLUE));
  // and a font
  Font aFont = new Font("Serif", Font.ITALIC | Font.BOLD);
  setFont(aFont.deriveFont(18.0f));
}

详情阅读How to Use BordersFont.deriveFont(float)

答案 1 :(得分:1)

通过getPreferred/Minimum/MaximumSize方法向布局管理器提供调整大小信息。这些通常委托给已安装的UI委托,它使用诸如文本,图标和边距属性之类的东西来确定按钮的大小。

一般来说,如果要“自定义”按钮,可以使用Action API,它提供了一种提供自包含实体的方法,可以轻松应用于不同的组件,例如菜单,按钮,甚至由键绑定API

使用

请查看How to use Actions了解详情