2013-05-01 2 views
4

Я понимаю, это звучит много, как и многие из уже заданных вопросов, но, пожалуйста, прочитайте; это похоже на аналогичную проблему, но не работает со многими уже предоставленными решениями.Изменить отключенный передний план JButton (шрифт) Цвет для Windows

В настоящее время я пишу на Java с Eclipse как на OS X, так и на Windows. С OS X у меня есть JButton, который идет от .setEnabled (true) до .setEnabled (false). Когда это происходит, когда он отключается, я меняю цвет фона через .setBackground (someColor). Все это время, цвет переднего плана (шрифта) не изменяется и остается черным. Это то, чего я хочу, это прекрасно, как есть.

В таком случае возникает проблема с Windows. То же, что и выше, у меня есть JButton, который идет от .setEnabled (true) к .setEnabled (false). Я также меняю свой фон через .setBackground (someColor). Однако, когда это происходит, цвет переднего плана (шрифта) не остается постоянным - он изменяется от черного до светло-серого. Это крайне неудобно и очень сложно читать с новым цветом фона.

Так что вопрос: Как изменить цвет переднего плана отключенного JButton?

Я уже пробовал следующее:

button.setForeground(Color.BLACK); 

button.setText(<html><font color = black>BUTTON</font></html>); 

UIManager.put("Button.disabledText", Color.BLACK); 

UIManager.getDefaults().put("Button.disabledText", Color.BLACK); 

UIManager.put("Button.foreground", Color.BLACK); 

UIManager.getDefaults().put("Button.foreground", Color.BLACK); 

Ни один из них не работал. И я также пробовал следующее:

  • Экспорт ОС X в файл .jar, а затем его использование в Windows. Цвет шрифта Windows по-прежнему изменяется.
  • Компиляция файла .app для ОС X и файла .exe для Windows. Проблема все еще остается.

Есть ли еще какое-то другое решение, которое я забыл?

В настоящее время я прибегал к тому, чтобы оставить шрифт в качестве неприглядного серого в настоящее время и изменить фон (который по какой-то причине все еще можно легко изменить через .setBackground()) на другие цвета, которые могут разместите его.

Так почему же разница в цвете между OS X и Windows? Я предпочитаю цветовую схему OS X, но я действительно не хочу иметь 2 набора кода для того, что по сути является одной и той же программой.

Что мне делать?

+2

Настройка цвета BG кнопок кажется очень плохая идея (1), если это не проектирование PLAF.Сказав это, чтобы лучше помочь, опубликуйте [SSCCE] (http://sscce.org/). 1) * «Я предпочитаю цветовую схему OS X» * Если ваши пользователи предпочли цветовую схему OS X, они, вероятно, будут * использовать * OS X! –

+0

Можете ли вы дать ясный цвет, который вы хотите иметь. И PLS SSCCE – Hydroid

+1

Почему вы не используете 'JToggleButton' вместо этого? – Azad

ответ

4

enter image description here. , , , , , enter image description here

import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.SwingUtilities; 

public class HtmlAndJButton { 

    final String buttonText = " Whatever words, <br> but nothing wise"; 
    final String buttonText1 = " Whatever words, <br> but nothing wise, " 
      + "<br> plus 1st. line, "; 
    final String buttonText2 = " Whatever words, <br> but nothing wise, " 
      + "<br> plus 1st. line, <br> plus 2nd. line,"; 
    private JButton btn1 = new JButton("Toggle"); 
    private JButton button = new JButton(buttonText); 
    private JButton button1 = new JButton("Toggle"); 
    private JButton button2 = new JButton("Toggle"); 

    public HtmlAndJButton() { 
     btn1.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       button.setText("<html><font color=" + (button.isEnabled() 
         ? "blue" : "red") + ">" + buttonText + "</font></html>"); 
       button.setEnabled(!button.isEnabled()); 
       button1.setText("<html><font color=" + (button1.isEnabled() 
         ? "red" : "green") + ">" + buttonText1 + "</font></html>"); 
       button1.setEnabled(!button1.isEnabled()); 
       button2.setText("<html><font color=" + (button2.isEnabled() 
         ? "green" : "yellow") + ">" + buttonText2 + "</font></html>"); 
       button2.setEnabled(!button2.isEnabled()); 
      } 
     }); 
     button.setText("<html><font color=red>" + buttonText + "</font></html>"); 
     button1.setText("<html><font color=green>" + buttonText1 + "</font></html>"); 
     button2.setText("<html><font color=yellow>" + buttonText2 + "</font></html>"); 
     JFrame f = new JFrame("ButtonTest"); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.setLayout(new GridLayout(2, 2)); 
     f.add(button); 
     f.add(button1); 
     f.add(button2); 
     f.add(btn1); 
     f.pack(); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
    } 

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

      @Override 
      public void run() { 
       HtmlAndJButton t = new HtmlAndJButton(); 
      } 
     }); 
    } 
} 
0

какая у вас версия на Java? Потому что после того, как я попробую ваш пример кода, он не работает. Я использовал Java 1.7, и он не работает.

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

public class TestEntryPoint { 

    private JButton btn1 = new JButton("Test"); 
    private JButton button1 = new JButton("Toggle"); 

    public TestEntryPoint() { 

     btn1.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 

       button1.setEnabled(!button1.isEnabled()); 

      } 
     }); 
     UIManager.put("Button.disabledText", Color.red); 
     JFrame f = new JFrame("ButtonTest"); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.setLayout(new GridLayout(2, 2)); 
     f.add(button1); 
     f.add(btn1); 
     f.pack(); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
    } 

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

      @Override 
      public void run() { 
       new TestEntryPoint(); 
      } 
     }); 
    } 
} 
Смежные вопросы