将图像插入 JScrollPane 并将 JScrollPane 插入 JFrame
Insert images into JScrollPane and JScrollPane into JFrame
我需要一个可以显示很多图像的程序,并且我需要 window 可以滚动的程序。我阅读了文档并在论坛上进行了搜索,但仍然没有成功。我尝试使用 JScrollPane 和 JFrame,如下所示。
JScrollPane class:
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。没有必要这样做,因为您没有向 class 添加任何新功能。
此外,切勿向 JScrollPane
添加组件。单个组件添加到滚动窗格的 JViewPort
。
所以在这种情况下,您将使用适当的布局管理器创建 JPanel。然后将面板添加到滚动窗格的视口。
所以基本代码可能是这样的:
JPanel imagePanel = new JPanel();
imagePanel.add( label1 );
imagePanel.add( label2 );
...
JScrollPane scrollPane = new JScrollPane( imagePanel );
window.add( scrollPane );
阅读 Swing Tutorial 以获取所有 Swing 基础知识的工作示例。
编辑:
您也可以尝试 Wrap Layout,它会在水平行已满时使组件换行到下一行。
我需要一个可以显示很多图像的程序,并且我需要 window 可以滚动的程序。我阅读了文档并在论坛上进行了搜索,但仍然没有成功。我尝试使用 JScrollPane 和 JFrame,如下所示。
JScrollPane class:
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。没有必要这样做,因为您没有向 class 添加任何新功能。
此外,切勿向 JScrollPane
添加组件。单个组件添加到滚动窗格的 JViewPort
。
所以在这种情况下,您将使用适当的布局管理器创建 JPanel。然后将面板添加到滚动窗格的视口。
所以基本代码可能是这样的:
JPanel imagePanel = new JPanel();
imagePanel.add( label1 );
imagePanel.add( label2 );
...
JScrollPane scrollPane = new JScrollPane( imagePanel );
window.add( scrollPane );
阅读 Swing Tutorial 以获取所有 Swing 基础知识的工作示例。
编辑:
您也可以尝试 Wrap Layout,它会在水平行已满时使组件换行到下一行。