Как изменить цвет фона JToolTip с помощью Nimbus LookAndFeel? - PullRequest
3 голосов
/ 18 октября 2011

В Java-приложении на основе Swing с использованием Nimbus LookAndFeel я пытаюсь установить цвет фона для всплывающих подсказок. Поэтому я создал подкласс JToolTip и использовал его в своих компонентах, переопределив createToolTip (). Пока все хорошо, и подсказка отображается правильно, но цвет фона не меняется. Цвет переднего плана установлен так, как ожидается. При изменении LookAndFeel, например, Металл Я могу установить цвета, как и ожидалось.

Вот небольшой пример с возможностью переключения между Металлом и Нимбом. Как я надеюсь, yopu видит, что цвет фона всплывающей подсказки кнопки устанавливается только при использовании металла.

import java.awt.Color;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JToolTip;

public class TooltipTestApp {

private static final String METAL_LOOK_AND_FEEL = "javax.swing.plaf.metal.MetalLookAndFeel";
private static final String NIMBUS_LOOK_AND_FEEL = "com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel";
private static JButton button;
private static String usedLookAndFeel = NIMBUS_LOOK_AND_FEEL;

    public static void main(String args[]) {
        button = new JButton() {

            @Override
            public JToolTip createToolTip() {
                JToolTip toolTip = super.createToolTip();
                toolTip.setBackground(Color.BLACK);
                toolTip.setForeground(Color.RED);

                    return toolTip;
            }
        };

        button.addActionListener(new java.awt.event.ActionListener() {

            @Override
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                TooltipTestApp.toggleLookAndFeel();
            }
        });

        button.setToolTipText("Some text");

        JFrame frame = new JFrame("TooltipTestApp");

        TooltipTestApp.toggleLookAndFeel();
        frame.add(button);
        frame.setSize(450, 100);
        frame.setVisible(true);
    }

    private static void toggleLookAndFeel() {
        try {
            if (usedLookAndFeel.equals(METAL_LOOK_AND_FEEL)) {
                usedLookAndFeel = NIMBUS_LOOK_AND_FEEL;
            } else {
                usedLookAndFeel = METAL_LOOK_AND_FEEL;
            }

            UIManager.setLookAndFeel(usedLookAndFeel);

            String lookAndFeelName = usedLookAndFeel.substring(usedLookAndFeel.lastIndexOf(".") + 1);
            button.setText("This is: " + lookAndFeelName);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

Ответы [ 2 ]

3 голосов
/ 18 октября 2011

Следующее также работает для Metal LAF без переопределения метода createToolTip ():

UIManager.put("ToolTip.background", Color.RED);

LAF может выбирать, использовать свойства UIManager или нет.Я понятия не имею, будет ли это работать с Nimbus.

2 голосов
/ 18 октября 2011

Попробуйте это:

 public class Main {
      public static void main(String args[]) {
        JFrame frame = new JFrame("JToolTip Sample");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JButton b1 = new JButton("Button 1") {
          public JToolTip createToolTip() {
            JToolTip tip = super.createToolTip();
            tip.setForeground(Color.YELLOW);
            tip.setBackground(Color.RED);
            tip.setFont(new Font("Arial", Font.BOLD,36));
            return tip;
          }
        };
        b1.setToolTipText("HELLO");
        frame.add(b1, BorderLayout.NORTH);
        frame.setSize(300, 150);
        frame.setVisible(true);
      }
    }

Источник: http://www.java2s.com/Code/Java/Swing-JFC/ModifythebehaviourofthedefaultJToolTip.htm

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