2013-12-06 4 views
0
Color newColor = new Color(197,222,90); 
JButton newButton; 
newButton = new JButton(icon); 
newButton.setBacgroundColor(newColor); 

Когда он нажат, он меняет цвет. Как я могу удержать его от изменения цвета. У меня есть несколько кнопок, поэтому, если есть решение в одном или двух рядах, помогите мне, и имейте в виду, что я начинаю, писать некоторые огромные классы не помогут мне, потому что у меня есть несколько кнопок с другим именем, которые будут затронуты этим ,Я не хочу менять цвет JButton при нажатии

EDIT: Решение в одной линии:

UIManager.put("Button.select", newColor); 

Но это меняет все кнопки цвета, но мне нужно еще иметь различный цвет.

EDIT2: После некоторого исследования я понял, что есть нелегкое решение (но это должно быть, ffs это всего лишь кнопка). Как я вижу, у меня есть 2 решения, 1. это разбить кнопки для разделения классов и установить для них UIManager, а во-вторых, создавать пользовательские кнопки. Для кнопки просто слишком много работы (ffs это только кнопка).

ответ

2

Я ничего не нашел, что может изменить это конкретное поведение на обычном JButton. Проблема заключается в том, что все, что вы пишете в своем actionlistener для кнопки, произойдет после того, как вы отпустите кнопку мыши, а не «при нажатии».

Однако есть обходные пути.

Мой предпочтительный выбор - удалить всю графику с кнопки, а затем добавить свои собственные изображения в обычные и нажатые состояния кнопки. Вы можете сделать снимок экрана своего графического интерфейса, вырезать кнопку и установить для этого изображения оба состояния.

JButton myButton = new JButton(); 

// Sets button x, y, width, height. Make the size match the image. 
myButton.setBounds(5, 30, 100, 30); 

// Remove border-graphics. 
myButton.setBorder(null); 

// Remove default graphics from the button 
myButton.setContentAreaFilled(false); 

// Remove the focus-indicating dotted square when focused (optional) 
myButton.setFocusPainted(false); 

// Here, myImage is a simple BufferedImage object. 
// You can set one like this, provided you have an "images" package, 
// next to your main class (ex: com.somecompany.someprogram.images), 
// that contains an image: 

BufferedImage myImage = ImageIO.read(getClass().getResource("images/myImage.png")); 

// Then we simply apply our image to both states for the button, and we're done. 
myButton.setIcon(new ImageIcon(myImage)); 

myButton.setPressedIcon(new ImageIcon(myImage)); 

Очевидно, что существует много способов, чтобы сохранить и загрузить изображение, но так как это не проблема, я оставляю дополнительные методы выхода из него.

Нет необходимости проходить через все это бесчисленное количество раз. Должно быть довольно легко написать собственную собственную реализацию класса JButton, в которой пользовательский конструктор принимает один параметр, являющийся BufferedImage, а затем конструктор устанавливает его соответствующим образом (меняет значки). Тогда все, что вам нужно сделать, когда вы создаете новый JButton, чтобы использовать свой собственный класс, и передать его изображение:

JButton btn = new MyCustomJButton(myImage); 

Вы также можете легко получить вместе с очень мало изображений. Все, что вам нужно, это HashMap, который содержит все изображения, с строкой в ​​качестве ключа. Представьте, что вам нужно 4 OK-кнопки. Вы делаете одно изображение кнопки с текстом «ОК», написанным на нем. Затем вы кладете этот образ в HashMap, например, так:

myMap.put("OK", myImage); 

Тогда вы могли бы сделать это при создании кнопки, снова и снова, если вы хотите больше:

JButton btn = new MyCustomJButton(myMap.get("OK")); 

В качестве альтернативы: Другим способом достижения этого, который довольно сложный, но, вероятно, считается «правильным путем», является использование ButtonUI, как представлено в this answer to another post.

+0

Это простое и хорошее решение, которое я искал. – Anak1n

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