Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Скриншот JFrame, программно 
V
    Опции темы
arcsupport
Дата 29.12.2011, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 24.10.2008

Репутация: нет
Всего: 2



  • Как сделать в обработчике события изображение всего изображенного JFrame?
  • Как сделать заливку всех-всех компонентов на JFrame одного конкретного цвета?


Это сообщение отредактировал(а) arcsupport - 29.12.2011, 15:19
PM MAIL   Вверх
jk1
Дата 29.12.2011, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 21
Всего: 75



Скриншот:
Код

Robot robot = new Robot();
BufferedImage bi=robot.createScreenCapture(new Rectangle(100,100));
ImageIO.write(bi, "jpg", new File("C:/imageTest.jpg"));



--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
arcsupport
Дата 29.12.2011, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 24.10.2008

Репутация: нет
Всего: 2



Так это скриншот угла. А надо именно того JFrame, откуда код вызывается. А если я подвигаю фрейм? А если он будет больше-меньше чем 100 на 100?
PM MAIL   Вверх
jk1
Дата 29.12.2011, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 21
Всего: 75



Цитата

Так это скриншот угла. А надо именно того JFrame, откуда код вызывается.

Значит надо брать размеры с фрейма и всего-то. Не думал что это так сложно.
Код

Robot robot = new Robot();
BufferedImage bi = robot.createScreenCapture(frame.getBounds());
ImageIO.write(bi, "jpg", new File("C:/imageTest.jpg"));



--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
arcsupport
Дата 29.12.2011, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 24.10.2008

Репутация: нет
Всего: 2



Спасибо. А как по поводу делания заливки всех-всех компонентов на JFrame одного конкретного цвета?
Пожалуйста, не пишите код. Мне это не нравится. Лучше укажите на соответствующий момент документации.
Я пытался сделать цикл по getComponents(), но это мне ничего не дало.
PM MAIL   Вверх
jk1
Дата 29.12.2011, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 21
Всего: 75



Цитата

 А как по поводу делания заливки всех-всех компонентов на JFrame одного конкретного цвета?


А зачем так делать? нужно просто сделать всю форму белой?


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
arcsupport
Дата 29.12.2011, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 24.10.2008

Репутация: нет
Всего: 2



По ряду причин надо, чтобы было черно-белым, при этом белого было гораздо больше. То, что действительно имеет значение, должно быть черным.

Добавлено через 47 секунд
Не только фрейм, но и все компоненты, такие как метки, таблицы, панели, кнопки, и т.п.
PM MAIL   Вверх
jk1
Дата 30.12.2011, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 21
Всего: 75



1. Рекурсивно обходите дерево компонентов начиная от Content Pane
2. Каждому назначайте Background/Foreground белого цвета
3. Вот собственно и все 

Вот пример (понимаю, что не любите код. Просто чтобы избежать вопросов в духе "Что такое Content Pane и где мне его взять?"):
Код

public static void main(String[] args) {
        final JFrame frame = new JFrame();
        frame.getContentPane().setLayout(new FlowLayout());
        final JButton button = new JButton("Make white");
        frame.getContentPane().add(new JLabel("Label"));
        frame.getContentPane().add(button);
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                makeWhite(frame.getContentPane());

            }

            private void makeWhite(Component comp) {
                comp.setBackground(Color.WHITE);
                comp.setForeground(Color.WHITE);
                if (comp instanceof Container){
                    for (Component child : ((Container) comp).getComponents()){
                        makeWhite(child);
                    }
                }
            }
        });
        frame.pack();
        frame.setBounds(100, 100, 300, 300);
        frame.setVisible(true);
    }


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


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
dorogoyIV
Дата 30.12.2011, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 36
Всего: 46



может так?
ColorFilter
PM MAIL   Вверх
arcsupport
Дата 30.12.2011, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 24.10.2008

Репутация: нет
Всего: 2



Спасибо большое всем. Вопрос решен.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0487 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.