Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/74: Рейтинг темы: голосов - 74, средняя оценка - 4.89
5 / 5 / 0
Регистрация: 30.10.2013
Сообщений: 180

Как сделать что бы при нажатии на кнопку менялся фон?

16.12.2013, 21:28. Показов 14532. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я наверное уже поднадоел глупыми вопросами, но рискну задать еще один на сегодня. Хочу сделать что бы при нажатии на кнопки менялся цвет фона (возрастал на определенное число).
Способ
Java
1
2
3
4
for (int i = 1; i < 255; i=i+30)
{
buttonPanel.setBackground(new Color(i, i, i));
}
не работает...
Если генерировать случайный цвет - то работает способ:
Java
1
2
3
buttonPanel.setBackground(new Color((float) Math.random(),
          (float) Math.random(),
          (float) Math.random())););
Но хочется именно что б при каждом клике на кнопку увеличивался тон цвета. Текущий неработающий код ниже:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
import java.awt.*;
import java.awt.EventQueue;
import java.awt.event.*;
import javax.swing.*;
 
/**
 * @version 1.32 2007-06-12
 * @author Cay Horstmann
 */
public class PlafTest
{
   public static void main(String[] args)
   {
      EventQueue.invokeLater(new Runnable()
         {
            public void run()
            {
               PlafFrame frame = new PlafFrame();
               frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
               frame.setVisible(true);
            }
         });
   }
}
 
/**
 * A frame with a button panel for changing look and feel
 */
class PlafFrame extends JFrame
{
   public PlafFrame()
   {
      setTitle("PlafTest");
      setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
 
      buttonPanel = new JPanel();
      
      
      UIManager.LookAndFeelInfo[] infos = UIManager.getInstalledLookAndFeels();
      for (UIManager.LookAndFeelInfo info : infos)
        { makeButton(info.getName(), info.getClassName());
         System.out.println(info.getName());
         System.out.println(info.getClassName()); }
      
      add(buttonPanel);
   }
 
   /**
    * Makes a button to change the pluggable look and feel.
    * @param name the button name
    * @param plafName the name of the look and feel class
    */
   void makeButton(String name, final String plafName)
   {
      // add button to panel
 
      JButton button = new JButton(name);
     
      buttonPanel.add(button);
      
 
      // set button action
 
      button.addActionListener(new ActionListener()
         {
            public void actionPerformed(ActionEvent event)
            {
               // button action: switch to the new look and feel
               try
               {
                  UIManager.setLookAndFeel(plafName);
                  SwingUtilities.updateComponentTreeUI(PlafFrame.this);
                  for (int i = 1; i < 255; i=i+30)
                  {
                     buttonPanel.setBackground(new Color(150+i, 150+i, 150+i));
                  }
               }
               catch (Exception e)
               {
                  e.printStackTrace();
               }
            }
         });
   }
   private JPanel buttonPanel;
   
   public static final int DEFAULT_WIDTH = 300;
   public static final int DEFAULT_HEIGHT = 200;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.12.2013, 21:28
Ответы с готовыми решениями:

Как сделать, чтоб при нажатии на кнопку менялся её фон?
Помогите пожалуйста, заранее спасибо!

Как сделать чтоб при нажатии на кнопку на 1 секунду менялся фон
Здравствуйте. Я новичок в java, пока много чего не понимаю, особенно с потоками беда. Помогите реализовать одну штуку. В общем есть...

Как сделать так, чтоб при нажатии на кнопку менялся цвет формы?
Lazarus. Сначала на голубой, потом при нажатии на ту же кнопку на фиолетовый и на серый? Заранее всем спасибо!

11
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
17.12.2013, 11:46
Вопрос на засчпку. Что должно произойти, чтобы Вы увидели изменение цвета фона?
0
5 / 5 / 0
Регистрация: 30.10.2013
Сообщений: 180
17.12.2013, 12:53  [ТС]
Ну я хотел сделать что бы при нажатии кнопок, любых, постепенно менялся задний фон - т.е. нажал не кнопку - RGB +30, еще раз нажал - еще +30. Можно задать изменение фона рандомным образом, но мне бы хотелось понять как его менять на определенное значение при каждом клике.
0
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
17.12.2013, 13:05
Цитата Сообщение от yourfanat Посмотреть сообщение
Ну я хотел сделать что бы при нажатии кнопок, любых, постепенно менялся задний фон - т.е. нажал не кнопку - RGB +30, еще раз нажал - еще +30. Можно задать изменение фона рандомным образом, но мне бы хотелось понять как его менять на определенное значение при каждом клике.
Вы не ответили на вопрос. Вы установили фон кнопке. Что должно произойти, чтобы Вы это увидели?
0
 Аватар для verylazy
462 / 462 / 71
Регистрация: 26.02.2013
Сообщений: 1,263
17.12.2013, 13:08
Java
1
2
3
4
for (int i = 1; i < 255; i=i+30)
                  {
                     buttonPanel.setBackground(new Color(150+i, 150+i, 150+i));
                  }
тут печалька наступает при i > 105
0
5 / 5 / 0
Регистрация: 30.10.2013
Сообщений: 180
17.12.2013, 13:19  [ТС]
Цитата Сообщение от Skipy Посмотреть сообщение
Вы не ответили на вопрос. Вы установили фон кнопке. Что должно произойти, чтобы Вы это увидели?
Почему кнопке? Вроде бы же фрейму. Немного не понял вашего вопроса.

Добавлено через 2 минуты
Цитата Сообщение от verylazy Посмотреть сообщение
Java
1
2
3
4
for (int i = 1; i < 255; i=i+30)
                  {
                     buttonPanel.setBackground(new Color(150+i, 150+i, 150+i));
                  }
тут печалька наступает при i > 105
Ну это все равно неверный вариант....
Можно 150 заменить на 50 например, хочется хоть какое то изменение увидеть...
0
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
17.12.2013, 15:28
Цитата Сообщение от yourfanat Посмотреть сообщение
Почему кнопке? Вроде бы же фрейму. Немного не понял вашего вопроса.
Хорошо, пусть панели. Вы установили панели цвет - вызвали setBackground. Что еще должно произойти, чтобы Вы увидели на экране это изменение?
0
5 / 5 / 0
Регистрация: 30.10.2013
Сообщений: 180
17.12.2013, 16:12  [ТС]
Еще должен произойти щелчок по любой кнопке. Т.е. я нажимаю на кнопку и меняется бекграунд на определенное число в rgb, затем еще раз я нажимаю на кнопку, и еще раз меняется задний фон. С каждым нажатием меняется фон по нарастающей.
0
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
17.12.2013, 16:48
Нет, Вы в упор не понимаете. Чтобы изменение было видно на экране, после установки цвета компоненту надо перерисовать. Вы не находите?

А теперь вопрос: в каком потоке обрабатывается перерисовка и в каком потоке обрабатывается нажатие на кнопку? Другими словами - может ли что-то отрисоваться раньше, чем закончит работать обработчик нажатия на кнопку?
0
5 / 5 / 0
Регистрация: 30.10.2013
Сообщений: 180
17.12.2013, 17:27  [ТС]
Прошу прощения за глупые вопросы, читать я начал недавно про джаву, и еще очень плохо ориентируюсь. Наверное учитывая то, что перерисовка и нажатие обрабатывается в одном потоке отрисовку я не увижу... А как в таком случае можно реализовать то что я написал? Это вообще осуществимо?

Добавлено через 20 минут
Ура! Разобрался! Создал 3 приватные переменные, а так же как каждый раз как вызывается событие, к ним добавляется определенное значение. Цвет заднего фона соответственно зависит от них. Набросок кода вот:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
import java.awt.*;
import java.awt.EventQueue;
import java.awt.event.*;
import javax.swing.*;
 
/**
 * @version 1.32 2007-06-12
 * @author Cay Horstmann
 */
public class PlafTest
{
   public static void main(String[] args)
   {
      EventQueue.invokeLater(new Runnable()
         {
            public void run()
            {
               PlafFrame frame = new PlafFrame();
               frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
               frame.setVisible(true);
            }
         });
   }
}
 
/**
 * A frame with a button panel for changing look and feel
 */
class PlafFrame extends JFrame
{
   public PlafFrame()
   {
      setTitle("PlafTest");
      setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
 
      buttonPanel = new JPanel();
      
      
      UIManager.LookAndFeelInfo[] infos = UIManager.getInstalledLookAndFeels();
      for (UIManager.LookAndFeelInfo info : infos)
        { makeButton(info.getName(), info.getClassName());
         System.out.println(info.getName());
         System.out.println(info.getClassName()); }
      
      add(buttonPanel);
   }
 
   /**
    * Makes a button to change the pluggable look and feel.
    * @param name the button name
    * @param plafName the name of the look and feel class
    */
   void makeButton(String name, final String plafName)
   {
      // add button to panel
 
      JButton button = new JButton(name);
     
      buttonPanel.add(button);
      
 
      // set button action
 
      button.addActionListener(new ActionListener()
         {
            public void actionPerformed(ActionEvent event)
            {
               // button action: switch to the new look and feel
               try
               {
                  
                  r += 10;
                  g += 10;
                  b += 10;
                buttonPanel.setBackground(new Color(r, g, b));
                UIManager.setLookAndFeel(plafName);
                  SwingUtilities.updateComponentTreeUI(PlafFrame.this);
 
                 
                 
                  
               }
               catch (Exception e)
               {
                  e.printStackTrace();
               }
            }
         });
   }
   private JPanel buttonPanel;
   private int r = 10;
   private int g= 10;
   private int b= 10;
   
   public static final int DEFAULT_WIDTH = 300;
   public static final int DEFAULT_HEIGHT = 200;
}
Всем спасибо большое! Читаю дальше Хорстмана)))
0
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
17.12.2013, 20:04
Можно существенно проще. Вместо setLookAndFeel, updateComponentTree и т.п. просто вызвать repaint у buttonPanel.
0
5 / 5 / 0
Регистрация: 30.10.2013
Сообщений: 180
18.12.2013, 03:45  [ТС]
Ок спасибо! Буду иметь ввиду) Я еще не дошел до этого. По книге осваиваю, и немного в сторону ухожу, когда вопросы возникают)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.12.2013, 03:45
Помогаю со студенческими работами здесь

Как сделать так что бы при нажатии на один из img менялся стиль?
Есть несколько img &lt;p ng-repeat=&quot;photo in photos&quot; &gt; &lt;img class=&quot;imgMain&quot; src=&quot;{{photo.src}}&quot; alt=&quot;{{photo.desc}}&quot;...

Как сделать, что бы при нажатии на чекбокс менялся цвет текста <lable>, его background и т.д.?
Здравствуйте. Нужно, чтобы при нажатии на label закрашивался не только квадрат checkbox, но и менялся цвет надписи, фон. Чекбокс...

Как написать цикл для кнопки Button, чтобы при нажатии менялся фон в Image?
Подскажите пожалуйста, как написать цикл для кнопки Button чтобы при нажатии менялся фон в виде Imade?

При нажатии на элемент менялся его фон
Здравствуйте, форумчане. Как сделать так, чтобы при нажатии на элемент списка или на какой-нибудь другой элемент менялся его фон?

Как сделать так, чтоб при каждом входе категории, менялся фон сайта на Joomla?
Как сделать так, чтоб при каждом входе категории, менялся фон сайта на Joomla? Ну допустим так. Захожу на главную страницу, там зеленый...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru