java - 将图像插入 JScrollPane 并将 JScrollPane 插入 JFrame

标签 java swing user-interface awt jscrollpane

我需要一个可以显示很多图像的程序,并且我需要一个可以滚动的窗口。我阅读了文档并在论坛上进行了搜索,但仍然没有成功。我尝试使用 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);
    }
}

编辑: 将变量和方法的名称更改为驼峰式大小写以停止触发人们。

最佳答案

首先,学习并遵循 Java 命名约定。变量名称不应以大写字符开头。您在本论坛或教科书中找到的任何示例都使用此约定。通过示例学习!!!

不要扩展 JScrollPane。没有必要这样做,因为您没有向该类添加任何新功能。

此外,永远不要向 JScrollPane 添加组件。将单个组件添加到滚动 Pane 的 JViewPort

所以在这种情况下,您将使用适当的布局管理器创建一个 JPanel。然后将面板添加到滚动 Pane 的视口(viewport)。

所以基本代码可能是这样的:

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

阅读Swing Tutorial获取所有 Swing 基础知识的工作示例。

编辑:

您也可以尝试 Wrap Layout当水平行已满时,这将导致组件换行到下一行。

关于java - 将图像插入 JScrollPane 并将 JScrollPane 插入 JFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43785412/

相关文章:

Java 流惰性 vs 融合 vs 短路

java - 使用相同的方法恢复 Room 数据库,但使用不同的 DAO

java - 在 JFrame 上用图形对象绘制文本

java - try catch java

java - java.awt.dialog是如何实现模态的?

Java GUI 垂直对齐

Java日历问题: why are these two Dates not equal?

java - 如何使用 Firebase 填充 RecyclerView 适配器

java - 安装 ubuntu 12.04 后 eclipse 中的跳跃动画详细信息(来自 askubuntu.com 的 x-post)

java - Swing 中 AA 和插值的全局渲染提示