繁体   English   中英

如何在Java中设置JButton的背景颜色?

[英]How to set a background color of a JButton in Java?

我正在开发一个Java桌面应用程序。 在其中我在JPanel上有4个JButtons 现在我希望每当点击一个按钮时,它的背景颜色会变成其他颜色(比如橙色)来表示它已被点击,所有其他3个按钮的背景颜色重置为默认颜色(如果它们中的任何一个都有橙色)背景颜色)。

因此,一次只有一个按钮可以具有橙色。

我应用的当前方法是我在JButton button1的xxxActionPerformed()方法中实现了以下代码

button1.setBackground(Color.Orange);
button2.setBackground(Color.Gray);
button3.setBackground(Color.Gray);
button4.setBackground(Color.Gray);

其余三个按钮同样如此。

实际上,我不希望背景颜色为灰色(对于未点亮的按钮)。 相反,我想要默认的背景颜色,以便背景颜色根据最终用户平台的外观将其自身调整为GUI的外观。

Q1。 如何获得默认背景颜色?

Q2。 这是正确的方法吗?还是有任何其他机制,通过它我可以将按钮组中的所有四个按钮分组,以便只有一个可以同时具有指定的属性(如单选按钮)?

您可以从UIManager获取按钮的标准背景颜色:

button1.setBackground(UIManager.getColor("Button.background"));

据我所知,按键可以改变不同的外观和感觉。 这是一个很好的webstart应用程序,显示所有可用的键:

http://tips4java.wordpress.com/2008/10/09/uimanager-defaults/

  1. 只需使用null即可使用默认颜色:

     button1.setBackground(Color.ORANGE); button2.setBackground(null); ... 
  2. 考虑将JToggleButtons与ButtonGroup一起使用,设置按钮的Icon和PressedIcon。 无需更改背景颜色。

     button1 = new JToggleButton(new ImageIcon("0.jpg")); button1.setSelectedIcon(new ImageIcon("1.jpg")); button2 = new JToggleButton(new ImageIcon("0.jpg")); button2.setSelectedIcon(new ImageIcon("2.jpg")); ... ButtonGroup group = new ButtonGroup(); group.add(button1); group.add(button2); ... 

Q1。:要获得按钮的GUI颜色,只需执行此操作

button1.setBackground(Color.Orange);
button2.setBackground(java.awt.SystemColor.control);
button3.setBackground(java.awt.SystemColor.control);
button4.setBackground(java.awt.SystemColor.control);

使用此类(java.awt.SystemColor。*),您可以获得用户界面的所有元素的颜色。

Q2:我从来没有听说过分组按钮。 然后,我不能回答你这个问题。

希望能帮助到你。

这是基于此示例的“Button.background”的横截面:

*** Metal javax.swing.plaf.metal.MetalLookAndFeel 636 entries
Button.background: javax.swing.plaf.ColorUIResource[r=238,g=238,b=238]

*** Nimbus com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel 1052 entries
Button.background: com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel$NimbusProperty@60961dff

*** CDE/Motif com.sun.java.swing.plaf.motif.MotifLookAndFeel 550 entries
Button.background: javax.swing.plaf.ColorUIResource[r=174,g=178,b=195]

*** Mac OS X com.apple.laf.AquaLookAndFeel 705 entries
Button.background: com.apple.laf.AquaNativeResources$CColorPaintUIResource[r=238,g=238,b=238]

如果您希望可以重新设计整个按钮UI

public class buttonUI extends javax.swing.plaf.basic.BasicButtonUI{

buttonUI(JButton b){
    b.setContentAreaFilled(false);
}

@Override
    public void paint(Graphics g,JComponent c){
             Graphics2D g2d = (Graphics2D) g;
             g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
             AbstractButton b = (AbstractButton) c;
             g2d.setFont(font.deriveFont(11f));
             Dimension d = b.getSize();
             FontMetrics fm = g2d.getFontMetrics();
             g2d.setColor(new Color(100,100,100));
             String caption = b.getText();
             int x = (d.width - fm.stringWidth(caption)) / 2;
             int y = (d.height + fm.getAscent()) / 2 - 2;
             g2d.drawString(caption, x, y);        
        }   }

并在您的主要代码中使用like

jButton1.setUI(new buttonUI(jButton1));

这是我如何使用它...你也可以有自己的方式

你有没有看过java中的装饰模式,你将一个按钮传递给一个方法,根据按钮是否是当前活动按钮来装饰它,例如,如果它悬停在上面。

public Jbutton decorateButton(JButton b, boolean isHoveredOver){
    if(isHoveredOver)
        b.setBackground(getContentPane().getBackground().GREEN);
    return b;
}

您可以从MouseEvent或ActionEvent方法调用此方法,然后发出repaint()。 将所有按钮放入数组或向量中并循环遍历它,将每个按钮传递给decorateButton方法,并将initail布尔值赋予false,然后在事件上将其设置为true。 这样,初始值是默认值,然后按钮在操作时进行修饰,按钮将显示为组的一部分

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM