【问题标题】:Creating JButton with customized look创建具有自定义外观的 JButton
【发布时间】:2012-12-19 00:47:21
【问题描述】:

我对 java swing 很陌生,不熟悉paint()。我想用上面的样子在 java swing 中创建一个按钮。 谁能帮我做到这一点。任何指导将不胜感激。提前致谢

【问题讨论】:

  • 除了Background and Foreground Colour 之外,这个JButton 有什么不同?对我来说是一样的 :-) 为什么你不能使用button.setBackground(Color.BLUE.darker())button.setForeground(Color.LIGHT_GRAY.brighter()),如果你想要更多效果,请更改 JButton 的字体?
  • 是的。我希望我的按钮在 facebook 上看起来很受宠若惊。避免梯度。你能帮忙吗?
  • 试试这个,非常接近你的喜好:button.setBorder(BorderFactory.createCompoundBorder( BorderFactory.createBevelBorder( BevelBorder.RAISED, Color.BLUE.darker(), Color.BLACK), BorderFactory.createEtchedBorder(EtchedBorder.LOWERED))); button.setFont(new Font("Arial", Font.BOLD, 14));

标签: java swing jbutton


【解决方案1】:

我用谷歌搜索了 Facebook 蓝色 RGB:59、89、182/十六进制代码为 #3B5998,字体系列:Tahoma

这就是我通过几个电话得到的结果,例如setFocusPainted(false)setBackground(new Color(59, 89, 182))setFont(new Font("Tahoma", Font.BOLD, 12))

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;

public class Test {

    public Test() {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new FlowLayout());
        JButton b = new JButton("Log In");//http://www.chacha.com/question/what-are-the-rgb-values-for-the-background-color-of-comments-on-facebook
        b.setBackground(new Color(59, 89, 182));
        b.setForeground(Color.WHITE);
        b.setFocusPainted(false);
        b.setFont(new Font("Tahoma", Font.BOLD, 12));//http://answers.yahoo.com/question/index?qid=20070906133202AAOvnIP
        frame.add(b);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new Test();
            }
        });
    }
}

除非您正在寻找相同的(IMO 这在不使用实际图像的情况下是最好的)...而不是设置按钮的图像是最好的方法

【讨论】:

  • @DavidKroukamp 谢谢你的回答
  • @mKorbel 你能看到什么 :)
  • @nik 很高兴它有帮助,顺便说一句,我只是注意到你从来没有提到这个按钮是 facebook,但它看起来和它一模一样,所以我在那之后对其进行了建模
【解决方案2】:

如果您想完全覆盖按钮的外观,最通用的解决方案是创建自己的ButtonUI

class MyButton extends BasicButtonUI {
    @Override
    public void paint(Graphics g, JComponent c) {
        AbstractButton b = (AbstractButton) c;
        ButtonModel model = b.getModel();
        ...
    }
}

然后,您可以根据按钮的状态(翻转、聚焦、武装、按下等)绘制任何您想要的东西。查看超类实现,了解如何执行此操作的基本思路。

然后只需设置要更改的按钮的 UI:

button.setUI(new MyButton());

【讨论】:

    【解决方案3】:

    要像您的示例一样创建自定义按钮,我认为最好的方法是准备图形文档(图像等),然后将其设置为按钮的属性:

    JButton button = new JButton();
    button.setIcon(new ImageIcon("yourButtonImage.jpg"));
    

    【讨论】:

    • 没有图标可以吗?
    • 是的,当然。准备一个自定义 .jpeg 文件并将其路径设置为 ImageIcon 实例,就像上面一样。
    • @DelShekasteh:这张图片会覆盖整个JButton吗?
    • @Gagandeep Bali 有三种方法(我认为它们都是正确的方法)使用 Icon、paintComponent、覆盖 BasicButtonUI,(或​​修改/设置 ColorUIResource 的颜色数组)
    【解决方案4】:

    在 Oracle javadoc 上,您可以看到 jbutton javadoc

    Jbutton java 方法 setIcon(Icon)ImageIcon 实现将解决问题!

    【讨论】:

      【解决方案5】:

      要创建示例中显示的自定义按钮,我认为使用以下代码:-

      JButton button = new JButton("Log In");
      button.setFont(new Font("Serif",Font.BOLD,20));
      button.setBackground(new Color(0,51,204));//import java.awt.Color;
      button.setForeground(Color.WHITE);
      button.setFocusPainted(false);
      button.setBorderPainted(false);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-01
        • 2010-09-05
        • 1970-01-01
        相关资源
        最近更新 更多