2017-02-01 8 views
0

Я хочу изменить цвет JButton по:Изменение цвета JButton без изменения формы

JButton button = new JButton(); 

button.setBackground(Color.decode("#00a5ff")); 

Для того, чтобы произошли изменения, я должен добавить:

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

Однако это удалите кривые вокруг краев и, таким образом, измените форму кнопки. Есть ли способ просто изменить цвет и сохранить другие свойства? Другим примером является изменение цвета (темнее) при нажатии кнопки без изменения ее цвета.

Вот код, который иллюстрирует разницу между этими двумя кнопками:

public static void main(String[] args) { 
    JFrame frame = new JFrame("frame"); 
    frame.setSize(new Dimension(300, 300)); 
    JButton button1 = new JButton(); 
    JButton button2 = new JButton(); 

    button1.setPreferredSize(new Dimension(100,100)); 
    button2.setPreferredSize(new Dimension(100,100)); 
    button2.setBackground(Color.decode("#00a5ff")); 
    button2.setBorderPainted(false); 
    button2.setOpaque(true); 

    JPanel pane1 = new JPanel(new FlowLayout()); 
    JPanel pane2 = new JPanel(new FlowLayout()); 

    pane1.add(button1); 
    pane2.add(button2); 
    frame.add(pane1, BorderLayout.WEST); 
    frame.add(pane2, BorderLayout.EAST); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setLocationRelativeTo(null); 
    frame.setVisible(true); 
} 

Благодарности

+1

В большинстве случаев это контролируется представителем делегата, который может или не может предоставить вам средства для его изменения (я уверен, что Windows L & F не работает - даже если вы расширяете реализацию, это все сделанное через частные функции: P) – MadProgrammer

ответ

-1

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

public static void main(String[] args) { 
    Frame frame = new Frame(); 
    Panel panel = new Panel(); 
    Button closeButton = new Button("Close"); 
    closeButton.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      frame.setVisible(false); 
      frame.dispose(); 
     }   
    }); 
    closeButton.setBackground(Color.decode("#00a5ff")); 
    panel.add(closeButton); 
    frame.add(panel); 
    frame.setSize(200, 100); 
    frame.setLocation(200, 50); 
    frame.setVisible(true); 
} 
+0

Это просто создает белую (стандартную кнопку) с синей рамкой вокруг нее. Обратите внимание, что я использую Mac. – Playdowin

+0

Я получаю синюю кнопку, но я на Win 10. Я скопировал код, который вы добавили, и я тоже получил синюю кнопку. – NinePlanFailed

+0

Проблема не в получении синей кнопки ... Проблема в том, что кнопка становится квадратной (а не мягкой), а также не становится темнее при нажатии на нее, как при изменении ее цвета. – Playdowin

0

Я буквально только что протестировал следующее:

JFrame frame = new JFrame("frame"); 
frame.setSize(new Dimension(300, 300)); 
JButton button = new JButton(); 

button.setBackground(Color.decode("#00a5ff")); 
frame.add(button); 
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
frame.setVisible(true); 

Казалось работать, но я работаю на Ubuntu Studio 16.04. Если вы заметите, что это не сработает, сообщите мне. Не могли бы вы показать результат своей белой кнопки или неудавшейся кнопки (если она все еще не работает)?

+1

Большинство Native Look and Feels не заполняют кнопку через фон, но через свойство contentAreaFilled, которое генерирует «форму» кнопки, что делает свойство 'background' несколько бесполезным. – MadProgrammer

+0

Это не работает, так как цвет не меняется. Я использую Mac. Чтобы цвет менялся, мне нужно сделать 'button.setBorderPainted (false);', который удаляет гладкие края и другие свойства кнопки и делает его прямоугольником с этим цветом. – Playdowin

+0

@MadProgrammer Знаете ли вы, как просто изменить цвет и не испортить форму? Я думаю, Netbeans смог сделать это в студии дизайна, однако, какие строки кода необходимы? – Playdowin

Смежные вопросы