栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用JButton在Java中创建自定义按钮

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用JButton在Java中创建自定义按钮

如果要创建CustomButtonUI,则必须查看

  • 最深的BasicXxxUI。

从JButton覆盖颜色列表

请注意,没有paintComponent()。是错误的,只需使用paint()方法,

如果可能的话,下面仅是一个简单示例(对于metal JButton)。请注意,仅对于metal LaF,我是如此懒惰,并且没有关于覆盖paintText,paintIcon,paintFocus,paintBorder的东西(对于所有功能,您必须检查BasicButtonUI的可用方法),而我放到ButtonModel上的东西只是为了我的享受。

import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.border.AbstractBorder;import javax.swing.border.Border;import javax.swing.event.ChangeEvent;import javax.swing.event.ChangeListener;import javax.swing.plaf.ComponentUI;import javax.swing.plaf.metal.metalButtonUI;public class textareaInButton {    private Jframe frame = new Jframe("sssssssss");    private JButton tip1Null = new JButton(" test button ");    public textareaInButton() {        Border line, raisedbevel, loweredbevel, title, empty;        line = BorderFactory.createLineBorder(Color.black);        raisedbevel = BorderFactory.createRaisedBevelBorder();        loweredbevel = BorderFactory.createLoweredBevelBorder();        title = BorderFactory.createTitledBorder("");        empty = BorderFactory.createEmptyBorder(1, 1, 1, 1);        final Border compound;        Color crl = (Color.blue);        compound = BorderFactory.createCompoundBorder(empty, new OldRoundedBorderLine(crl));        Color crl1 = (Color.red);        final Border compound1;        compound1 = BorderFactory.createCompoundBorder(empty, new OldRoundedBorderLine(crl1));        Color crl2 = (Color.black);        final Border compound2;        compound2 = BorderFactory.createCompoundBorder(empty, new OldRoundedBorderLine(crl2));        tip1Null.setFont(new Font("Serif", Font.BOLD, 14));        tip1Null.setForeground(Color.darkGray);        tip1Null.setPreferredSize(new Dimension(50, 30));        tip1Null.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(ActionEvent e) { }        });        tip1Null.setBorderPainted(true);        tip1Null.setFocusPainted(false);        tip1Null.setBorder(compound);        tip1Null.setHorizontalTextPosition(SwingConstants.CENTER);        tip1Null.setVerticalTextPosition(SwingConstants.BOTTOM);        tip1Null.setUI(new ModifButtonUI());        tip1Null.getModel().addChangeListener(new ChangeListener() { @Override public void stateChanged(ChangeEvent e) {     ButtonModel model = (ButtonModel) e.getSource();     if (model.isRollover()) {         tip1Null.setBorder(compound1);     } else {         tip1Null.setBorder(compound);     }     if (model.isPressed()) {         tip1Null.setBorder(compound2);     } }        });        frame.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);        frame.add(tip1Null, BorderLayout.CENTER);        frame.setLocation(150, 150);        frame.setPreferredSize(new Dimension(310, 75));        frame.setLocationRelativeTo(null);        frame.pack();        frame.setVisible(true);    }    public static void main(String args[]) {        EventQueue.invokeLater(new Runnable() { @Override public void run() {     textareaInButton taib = new textareaInButton(); }        });    }}class OldRoundedBorderLine extends AbstractBorder {    private final static int MARGIN = 5;    private static final long serialVersionUID = 1L;    private Color color;    OldRoundedBorderLine(Color clr) {        color = clr;    }    public void setColor(Color clr) {        color = clr;    }    @Override    public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {        ((Graphics2D) g).setRenderingHint( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);        g.setColor(color);        g.drawRoundRect(x, y, width, height, MARGIN, MARGIN);    }    @Override    public Insets getBorderInsets(Component c) {        return new Insets(MARGIN, MARGIN, MARGIN, MARGIN);    }    @Override    public Insets getBorderInsets(Component c, Insets insets) {        insets.left = MARGIN;        insets.top = MARGIN;        insets.right = MARGIN;        insets.bottom = MARGIN;        return insets;    }}class ModifButtonUI extends metalButtonUI {    private static final ModifButtonUI buttonUI = new ModifButtonUI();    ModifButtonUI() {    }    public static ComponentUI createUI(JComponent c) {        return new ModifButtonUI();    }    @Override    public void paint(Graphics g, JComponent c) {        final Color color1 = new Color(230, 255, 255, 0);        final Color color2 = new Color(255, 230, 255, 64);        final Color alphaColor = new Color(200, 200, 230, 64);        final Color color3 = new Color( alphaColor.getRed(), alphaColor.getGreen(), alphaColor.getBlue(), 0);        final Color color4 = new Color( alphaColor.getRed(), alphaColor.getGreen(), alphaColor.getBlue(), 64);        super.paint(g, c);        Graphics2D g2D = (Graphics2D) g;        GradientPaint gradient1 = new GradientPaint( 0.0F, (float) c.getHeight() / (float) 2, color1, 0.0F, 0.0F, color2);        Rectangle rec1 = new Rectangle(0, 0, c.getWidth(), c.getHeight() / 2);        g2D.setPaint(gradient1);        g2D.fill(rec1);        GradientPaint gradient2 = new GradientPaint( 0.0F, (float) c.getHeight() / (float) 2, color3, 0.0F, c.getHeight(), color4);        Rectangle rec2 = new Rectangle(0, c.getHeight() / 2, c.getWidth(), c.getHeight());        g2D.setPaint(gradient2);        g2D.fill(rec2);    }    @Override    public void paintButtonPressed(Graphics g, AbstractButton b) {        paintText(g, b, b.getBounds(), b.getText());        g.setColor(Color.red.brighter());        g.fillRect(0, 0, b.getSize().width, b.getSize().height);    }    public void paintBorder(Graphics g) {    }    @Override    protected void paintFocus(Graphics g, AbstractButton b,        Rectangle viewRect, Rectangle textRect, Rectangle iconRect) {    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/393547.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号