Java 将图像插入JScrollPane,并将JScrollPane插入JFrame

Java 将图像插入JScrollPane,并将JScrollPane插入JFrame,java,swing,user-interface,awt,jscrollpane,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 JScrollP

我需要一个程序,显示许多图像,我需要一个可以滚动的窗口。我阅读了文档并在论坛上搜索了一下,但还是没有做到。我试过使用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");
    }
}
主要内容:

编辑:
将变量和方法的名称更改为camel case以停止触发人员。

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

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

此外,切勿将组件添加到
JScrollPane
。单个组件添加到滚动窗格的
JViewPort

因此,在本例中,您将使用适当的布局管理器创建一个JPanel。然后将面板添加到滚动窗格的视口中

因此,基本代码可能类似于:

JPanel imagePanel = new JPanel();
imagePanel.add( label1 );
imagePanel.add( label2 );
...
JScrollPane scrollPane = new JScrollPane( imagePanel );
window.add( scrollPane );
阅读所有Swing基础知识的工作示例

编辑:


您还可以尝试,当水平行已满时,它将使组件换行到下一行。

根据需要将属性设置为
VERTICAL\u SCROLLBAR\u
用于水平滚动
水平滚动
滚动条\u ased
用于垂直滚动1)在
jscrolllpane的
列表中显示许多图像。它最适合所有大小相同的图像。而对于不同大小或较大的图像,我们可以实现一个
ListCellRenderer
,将图像缩放到某个最大宽度和/或高度。2) 请参见3)
//TODO自动生成的方法存根
在非自动生成的代码存在后,您能猜出应该如何处理这些注释吗?。。4)
JFrame Window=newjframe()
请学习常见的Java命名法(命名约定-例如,
每个大写类
firstWordLowerCaseMethod()
firstWordLowerCaseAttribute
,除非它是一个
大写常量
),并始终如一地使用它。此外,不要使用标准API的现有类的名称,而是使其成为更特定于该用途的名称。这很令人困惑。5) 在源代码中只需要一行空白就可以了。
{
之后或
}
之前的空行通常也是多余的。。。6) 而不是使用
JLabel
/
MouseListener
组合键。为了显示图像,我建议使用一个(可能未修饰的)
JButton
和一个
ActionListener
。默认情况下,按钮可以获得键盘焦点,动作侦听器将对鼠标和键盘输入做出反应。
JPanel imagePanel = new JPanel();
imagePanel.add( label1 );
imagePanel.add( label2 );
...
JScrollPane scrollPane = new JScrollPane( imagePanel );
window.add( scrollPane );