Как рисовать изображения на JFrame - PullRequest
0 голосов
/ 21 февраля 2012

У меня есть массив изображений, хранящихся в массиве BufferedImage.Я хочу отобразить эти изображения в виде JFrame в виде таблицы.Как я могу это сделать.Примечание: количество изображений в массиве buffered image является динамическим

Ответы [ 3 ]

4 голосов
/ 21 февраля 2012

1) используйте JList там вы можете поместить Icon (из BufferedImage), Renderer возвращает JLabel/JComponent по умолчанию

2) все изменения (удалить, переупорядочить, добавить) должны быть сделаны на EDT, тогда лучше было бы управлять всеми этими событиями с SwingWorker или Runnable#Thread

3) положить эти Objects в DefaultListModel для JList

1 голос
/ 21 февраля 2012

В вашем вопросе есть обе темы: нарисуйте BufferedImage (что сделано с Graphics) и изображения макета.

Вы можете сделать свой собственный макет, но это может быть сложно.

Чтобы Swing сделал это за вас, используйте уже определенный макет (например, GridLayout или FlowLayout) и добавьте столько JPanel, сколько у вас есть BufferedImage. Убедитесь, что ваш JPanel имеет фиксированный размер (см. setPreferredSize()).

Пользовательское рисование выполняется с помощью Graphics/Graphics2D API. На каждом JComponent вы можете получить базовый экземпляр Graphics для настройки рендеринга. Нарисуйте каждое изображение BufferedImage в экземпляре graphics2D каждого JPanel.

Последний трюк состоит в нормализации размеров изображений и не забываете относительные отношения при вызове Graphics.drawImage или обрезку изображений, если вы хотите соблюдать пропорции (это то, чего пользователи ожидают большую часть времени).

1 голос
/ 21 февраля 2012

Создайте JPanel и установите для его менеджера макета значение GridLayout с количеством строк и столбцов, которые вы хотите в сетке.

Затем для каждого BufferedImage создайте JLabel и установите его значок на новый IconImage, который содержит BufferedImage.

Наконец добавьте все JLabels к JPanel в нужном вам порядке и добавьте JPanel к JFrame.

Вот пример с макушки головы; некоторый псевдокод, так как у меня нет изображений для работы:

JFrame frame = new JFrame("Title");

JPanel gridPanel = new JPanel();
//Layout as a grid with 4 rows and 3 columns
gridPanel.setLayout(new GridLayout(4,3)); 

//Pseudocode.
for(each BufferedImage in BufferedImageArray as img) {
    gridPanel.add(new JLabel(new ImageIcon(img));
}

frame.add(gridPanel);
//Other frame stuff you want here
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(600,600);
frame.setVisible(true);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...