Swing: настройка фона JButton - PullRequest
       11

Swing: настройка фона JButton

1 голос
/ 19 ноября 2011

Я хочу установить цвет фона JButton.Для этого я использую метод setBackground ().

Этот метод jsut устанавливает цвет границы кнопки, а не всей кнопки указанного цвета.Почему так ?Это единственный способ установить цвет фона кнопки.Где я делаю ошибку, из-за которой устанавливается только граница кнопки указанного цвета, а не фактическая кнопка?

Код:

    account_btn.setAction(actionMap.get("AccountingClicked")); // NOI18N
    account_btn.setBackground(Utility.getBackgroundColor());
    account_btn.setFont(Utility.getButtonFont());
    account_btn.setForeground(Utility.getTextColor());
    org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance(cashaccountingapp.CashAccountingApp.class).getContext().getResourceMap(MainPanel.class);
    account_btn.setText(resourceMap.getString("account_btn.text")); // NOI18N
    account_btn.setBorderPainted(false);
    account_btn.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
    account_btn.setName("account_btn"); // NOI18N
    account_btn.setOpaque(true);
    add(account_btn);

Результат: enter image description here

Пробовал также установить setOpaque (true).Но вы можете увидеть результаты account_btn т.е. "Бухгалтерский учет".setOpaque, похоже, не имеет никаких эффектов.

Любая идея.

РЕШЕНИЕ:

Установка L & F

    private void initLookandFeel() {
    try {
        System.out.println("DEFAULT Look & Feel = " + UIManager.getLookAndFeelDefaults().toString());
        UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
        javax.swing.SwingUtilities.updateComponentTreeUI(this.mainPanel);
        System.out.println("Look & Feel = " + UIManager.getLookAndFeel().toString());
    } catch(Exception e) { ..... }
    }

Я вызываю initLookandFeel () после initComponents ()а также обновить мою главную панель.Также необходимо обновить динамически добавляемую панель на начальном этапе, после чего больше не нужно ничего настраивать.

Ответы [ 3 ]

3 голосов
/ 19 ноября 2011

Red Buttons

import java.awt.*;
import javax.swing.*;

class ColoredButtons {

    ColoredButtons() {
        JPanel gui = new JPanel(new GridLayout(1,0,5,5));

        JButton one = new JButton("One");
        one.setBackground(Color.RED);
        JButton two = new JButton("Two");
        two.setBackground(Color.RED);

        gui.add(one);
        gui.add(two);

        JOptionPane.showMessageDialog(null, gui);
    }

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

Есть мой SSCCE.Кнопки красные.PLAF - металл.

Что возвращает меня к: Где находится ваш SSCCE?Какой PLAF вы используете?

1 голос
/ 19 ноября 2011

Я считаю, что фон Jbutton зависит от того, какой стиль вы используете.Чтобы изменить фон, вам может потребоваться изменить

setUI(ComponentUI newUI)

на свой собственный.

1 голос
/ 19 ноября 2011

Попробуйте установить границы, окрашенные в ложное и непрозрачное истинное

account_btn.setBorderPainted(false);
account_btn.setOpaque(true);
...