Невозможно добавить изображение в jscrollpane внутри jframe

Я пытаюсь добавить изображение в свой jframe с помощью панели jscroll. Я пробовал несколько вещей, но изображение появляется только в фоновом режиме. Что-то вроде этого, ниже редактора изображений.

введите здесь описание изображения

вот мой код:

   private void initComponents(){
     jScrollPane1 = new javax.swing.JScrollPane();
     ImageImplement panel = new ImageImplement(new ImageIcon(mean.get(0)).getImage());
     jScrollPane1.add(panel); setVisible(true); setSize(400,400); setDefaultCloseOperation(EXIT_ON_CLOSE);
   }
   class ImageImplement extends JScrollPane { 
     private Image img; 
     public ImageImplement(Image img) { this.img = img;
     Dimension size = new Dimension(img.getWidth(null), img.getHeight(null)); 
     setPreferredSize(size);
     setMinimumSize(size);
     setMaximumSize(size); 
     setSize(size); 
     setLayout(null); } 
     public void paintComponent(Graphics g) { 
     g.drawImage(img, 0, 0, null); } 
     } 

person ani    schedule 22.05.2017    source источник
comment
1) Чтобы быстрее получить помощь, опубликуйте минимально воспроизводимый пример или Короткий, автономный, правильный пример. 2) Одним из способов получения изображений для примера является горячая ссылка на изображения, которые можно увидеть в этих вопросах и ответах. 3) Графические интерфейсы Java должны работать с разными ОС, размером экрана, разрешением экрана и т. д., используя разные PLAF в разных регионах. Как таковые, они не способствуют идеальной компоновке пикселей. Вместо этого используйте менеджеры компоновки или их комбинации вместе с ..   -  person Andrew Thompson    schedule 22.05.2017
comment
.. отступы и границы макета для белого пространства. 4) g.drawImage(img, 0, 0, null); Поскольку каждый JComponent является ImageObserver, лучше всего будет g.drawImage(img, 0, 0, this);   -  person Andrew Thompson    schedule 22.05.2017


Ответы (1)


Не расширяйте JScrollPane и не рисуйте на заказ.

Вместо этого вы просто создаете JLabel с ImageIcon. Затем вы добавляете метку на панель прокрутки, а панель прокрутки — на фрейм.

Итак, основная логика такова:

ImageIcon icon = new ImageIcon(...);
JLabel label = new JLabel( icon );
JScrollPane scrollPane = new JScrollPane( label );
frame.add(scrollPane, BorderLayout.CENTER);
person camickr    schedule 22.05.2017
comment
Но тогда как мне установить размер изображения - person ani; 22.05.2017
comment
@ани, нет. Этикетка автоматически определит предпочтительный размер на основе размеров изображения. - person camickr; 22.05.2017
comment
Можете ли вы сказать мне, как я могу заменить текущее изображение в JScrollPane новым изображением? - person ani; 23.05.2017
comment
@ani, замени иконку в ярлыке. Прочитайте API JLabel для соответствующего метода установки. - person camickr; 23.05.2017
comment
stackoverflow.com/questions/44120528/ задали этот вопрос здесь и дали код... Но, похоже, это не работает - person ani; 23.05.2017
comment
@ani, and given the code... - нет, ты не дал код. Вас несколько раз просили опубликовать правильный минимально воспроизводимый пример. Если вам нужна помощь, постарайтесь задать правильный вопрос. - person camickr; 23.05.2017