有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

用户界面如何在Java中设置JButton的背景色?

我正在开发一个Java桌面应用程序。在它里面,我在一个JPanel上有4JButtons。现在,我希望每当单击一个按钮时,其背景颜色都会更改为其他颜色(如橙色),以表示已单击该按钮,并且所有其他3个按钮的背景颜色都会重置为其默认颜色(如果其中任何一个按钮的背景色为橙色)

因此,一次只能有一个按钮具有橙色

我目前采用的方法是在JButton按钮1的xxxActionPerformed()方法中实现了以下代码

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

其余的三个按钮也是一样

现在在实际中,我不希望背景颜色为灰色(对于未锁定的按钮)。相反,我希望使用默认的背景色,以便背景色能够根据最终用户平台的外观调整自己以适应GUI的外观

问题1。如何获得默认背景色

问题2。这是正确的方法吗?或者是否有其他机制可以将按钮组中的所有四个按钮分组,以便一次只能有一个按钮具有指定的属性(如单选按钮)


共 (6) 个答案

  1. # 1 楼答案

    您研究过java中的decorator模式吗?您将一个按钮传递到一个方法中,该方法根据按钮是否是当前活动的按钮(例如,如果它悬停在上方)对其进行装饰

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

    您可以从MouseEvent或ActionEvent方法调用此方法,然后发出一个repaint()。将所有按钮放入一个数组或向量中,循环通过它,将每个按钮传递给decorateButton方法,并将initail布尔值设为false,然后在事件中将其设为true。 通过这种方式,初始值是默认值,然后按钮在动作时被装饰,按钮将显示为一个组的一部分

  2. # 2 楼答案

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

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

    据我所知,钥匙可能会在不同的外观中发生变化;感觉。下面是一个不错的webstart应用程序,它显示了所有可用的密钥:

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

  3. # 3 楼答案

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

      button1.setBackground(Color.ORANGE);
      button2.setBackground(null);
      ...
      
    2. < P>考虑使用JToggleButtons与ButoGROUP,设置按钮的图标和PrimeDeCon。无需更改背景色

      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);
      ...
      
  4. # 4 楼答案

    如果你想重新设计你的整个按钮界面

    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);        
            }   }
    

    在你的主要代码中使用

    jButton1.setUI(new buttonUI(jButton1));
    

    这就是我使用它的方式。。你也可以有自己的方式

  5. # 5 楼答案

    问题1:要获得按钮的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.*),您可以获得用户界面所有元素的颜色

    问题2:我从没听说过分组按钮。那么,我不能回答你这个问题

    希望有帮助

  6. # 6 楼答案

    下面是基于这个example的“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]