Как установить цвет фона JButton в Java? - PullRequest
5 голосов
/ 18 января 2010

Я занимаюсь разработкой Java-приложения для рабочего стола.В нем у меня 4 JButtons на JPanel.Теперь я хочу, чтобы при каждом нажатии кнопки ее цвет фона изменялся на какой-то другой цвет (скажем, оранжевый), чтобы показать, что она была нажата, и цвет фона всех трех других кнопок сбрасывается на свой цвет по умолчанию (в случае, если у любой из них был оранжевыйцвет фона).

Таким образом, за один раз только одна кнопка может иметь оранжевый цвет.

Текущий подход, который я применил, заключается в том, что я реализовал следующий код в xxxActionPerformed()метод JButton button1

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

и аналогично для остальных трех кнопок.

Теперь в действительности я не хочу, чтобы цвет фона был серым (для кнопки без клика).Вместо этого я хочу использовать цвет фона по умолчанию, чтобы цвет фона изменялся в соответствии с внешним видом графического интерфейса в соответствии с внешним видом платформы конечного пользователя.

Q1.Как я могу получить цвет фона по умолчанию?

Q2.Это правильный подход для этого или есть какой-то другой механизм, с помощью которого я могу сгруппировать все четыре кнопки в группе кнопок, чтобы только одна могла иметь указанное свойство одновременно (например, радиокнопки)?

Ответы [ 6 ]

9 голосов
/ 18 января 2010
  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);
    ...
    
8 голосов
/ 18 января 2010

Вы можете получить стандартный цвет фона для кнопок из UIManager:

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

Насколько я знаю, клавиши могут меняться по-разному.Вот хорошее веб-приложение, которое показывает все доступные ключи:

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

1 голос
/ 18 января 2010

Вот сечение «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]
1 голос
/ 18 января 2010

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 .: Я никогда не слышал о кнопках группировки.Тогда я не могу ответить вам на этот вопрос.

Надеюсь, это поможет.

0 голосов
/ 14 мая 2015

Если вы хотите, вы можете изменить дизайн всего пользовательского интерфейса кнопки

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

Вот как я это использую .. у тебя тоже может быть свой собственный путь

0 голосов
/ 17 мая 2012

Если вы изучили шаблон декоратора в java, вы передаете кнопку в метод, который ее декорирует в зависимости от того, является ли кнопка активной в данный момент, например, если она зависла над вами.

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

youвызовите этот метод из методов MouseEvent или ActionEvent и просто выполните repaint () после.поместите все свои кнопки в массив или вектор и обведите их, передавая каждую из них в метод decorateButton и присваивая логическому значению initail значение false, а затем по событию устанавливайте его в значение true.Таким образом, начальное значение является значением по умолчанию, и кнопка затем оформляется при действии, и кнопки будут действовать как часть группы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...