Вставьте изображения в JScrollPane и JScrollPane в JFrame

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

Класс JScrollPane:

import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.*;

public class EmojiWindow extends JScrollPane {

    private void NewImg(String EmojiLocation, String EmojiName) {
        JLabel Emoji = new JLabel(new ImageIcon(EmojiLocation));
        Emoji.setToolTipText(EmojiName);
        add(Emoji);

        Emoji.addMouseListener(new MouseListener(){
            public void mouseClicked(MouseEvent arg0) {}
            public void mouseEntered(MouseEvent arg0) {}
            public void mouseExited(MouseEvent arg0) {}
            public void mouseReleased(MouseEvent arg0) {}

            @Override
            public void mousePressed(MouseEvent e) {
                if(SwingUtilities.isLeftMouseButton(e))
                {
                    JFrame frame = new JFrame("new frame");
                    frame.setSize(300, 10);
                    frame.setVisible(true);
                }
            }
        });
    }

    public EmojiWindow(){
        NewImg("fbike.png", "Riding a bike");
        NewImg("fdizzy.png", "Dizzy");
        NewImg("fcubehead.png", "Cube head");
        NewImg("fhappy.png", "Happy");
    }
}

Главный:

import java.awt.*;
import javax.swing.*;

public class Main {

    public static void main(String[] args)
    {
        EmojiWindow ScrollPane = new EmojiWindow();
        ScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

        JFrame Window = new JFrame();

        Window.add(ScrollPane, BorderLayout.SOUTH);
        Window.setSize(300, 400);
        Window.setVisible(true);
    }
}

1 ответ

Решение

Прежде всего, изучите и соблюдайте соглашения об именах Java. Имена переменных НЕ должны начинаться с символа верхнего регистра. Любой пример, который вы найдете в этом форуме или учебнике, использует это соглашение. Учись на примере!!!

Не расширяйте JScrollPane. Нет необходимости делать это, так как вы не добавляете в класс никаких новых функциональных возможностей.

Кроме того, никогда не добавляйте компоненты в JScrollPane, Один компонент добавляется к JViewPort панели прокрутки.

Таким образом, в этом случае вы должны создать JPanel, используя соответствующий менеджер раскладки. Затем вы добавляете панель в область просмотра панели прокрутки.

Таким образом, основной код может быть что-то вроде:

JPanel imagePanel = new JPanel();
imagePanel.add( label1 );
imagePanel.add( label2 );
...
JScrollPane scrollPane = new JScrollPane( imagePanel );
window.add( scrollPane );

Прочитайте Учебное пособие по Swing для ознакомления с примерами работы со всеми основами Swing.

Редактировать:

Вы также можете попробовать Wrap Layout, который приведет к переносу компонентов на следующую строку, когда горизонтальный ряд заполнен.

Другие вопросы по тегам