2

我正在编写一个 POS 系统(销售点)来取乐。POS 系统的一个典型特征是针对不同产品具有不同背景颜色的按钮。但我不是指按钮图像背后的背景,我的意思是在这张随机图片中,我从谷歌图片中得到了: 在此处输入图像描述

编辑:注意我改变了系统的外观和感觉

我需要用我的按钮做类似的事情。我知道这可能有几种方法:

  1. 为我的按钮创建外观和感觉?
  2. 完全覆盖我的 JButtons 中的 paintComponenet 方法(但这是一种非常可悲的方法......当我覆盖它时没有绘制边框 + 文本......显然是个坏主意)
  3. 使用 button.setContentAreaFilled(false);,并在按钮后面放置一个与按钮大小相同的 JPanel。

我真的不知道如何创建自己的外观和感觉,这听起来很痛苦,尤其是对于 1 个按钮,我听到一些关于打破外观和感觉的事情,这让我害怕这个想法。第三种方式听起来很合理,而且不是非常困难,但我做我想做的事情的最好方法是什么?

现在我创建按钮的代码是这样的:

JButton b = new JButton(text);
    b.addActionListener(this);
    b.setFont(Main.f);
    b.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
    buttons.add(b);
    return b;

我弄乱了这段代码(主要是为了好玩,而不是实用):

JButton b = new JButton(text){
        public void paintComponent(Graphics g){
            super.paintComponent(g);
            Color bg = getBackground();
            int borderchange = -50;
            g.setColor(new Color(
                    Math.max(0,bg.getRed()+borderchange),
                    Math.max(bg.getGreen()+borderchange,0),
                    Math.max(bg.getBlue()+borderchange,0)));
            g.fillRect(0,0,getWidth(),getHeight());
            g.setColor(getBackground());
            int border = 4;
            g.fillRect(border,border,getWidth()-border,getHeight()-border);
            g.setColor(Color.BLACK);
            g.setFont(getFont());
            g.drawString(getText(),getWidth()/2,getHeight()/2);
        }
    };
4

2 回答 2

2
  • 为我的按钮创建外观和感觉?

    1. 外观和感觉就像主题一样,

    2. 默认情况下,此 ColorScheme 具有一、二、三种颜色,此主题适用于所有 Swing JComponent,

    3. 那么所有 Swing JComponents 都有相同的颜色,ColorScheme

    4. 不是你要找的东西

  • 完全覆盖我的 JButtons 中的 paintComponenet 方法(但这是一种非常可悲的方法......当我覆盖它时没有绘制边框 + 文本......显然是个坏主意)

    1. JButton 有颜色数组

    2. 您可以覆盖paintComponent,填充整个区域,使用一种颜色(不是您要寻找的东西)的矩形或使用GradientPaint

    3. 您可以覆盖BasicButtonUI

    4. 覆盖UIManager 中的正确键并将颜色数组放在那里

  • 使用 button.setContentAreaFilled(false);,并在按钮后面放置一个与按钮大小相同的 JPanel。

    1. 这可能是最简单的方法,准备图标(或下载图标集)

    2. 使用正确的方法,实现(鼠标和键和键绑定)事件

于 2013-02-23T19:17:26.733 回答
1

你有没有尝试过:

yourButton.setBackground(COLOR)

?

于 2013-02-23T17:15:30.667 回答