【发布时间】:2023-03-10 09:24:01
【问题描述】:
我需要一个显示许多图像的程序,并且我需要一个可以滚动的窗口。我阅读了文档并在论坛上进行了搜索,但我仍然没有设法做到这一点。我尝试使用 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);
}
}
编辑: 将变量和方法的名称更改为驼峰式以停止触发人。
【问题讨论】:
-
将属性设置为
VERTICAL_SCROLLBAR_AS_NEEDED用于水平滚动HORIZONTAL_SCROLLBAR_AS_NEEDED用于垂直滚动 -
1) This answer 在
JList中显示JScrollPane中的许多图像。它最适合大小相同的图像。虽然对于不同大小或较大的图像,我们可以实现ListCellRenderer将图像缩放到某个最大宽度和/或高度。 2) 请参阅The Use of Multiple JFrames, Good/Bad Practice? 3)// TODO Auto-generated method stub在存在非自动生成的代码之后,你能猜出你应该对这些 cmets 做什么吗?跨度> -
.. 4)
JFrame Window = new JFrame();请学习常见的 Java 命名法(命名约定 - 例如EachWordUpperCaseClass、firstWordLowerCaseMethod()、firstWordLowerCaseAttribute,除非它是UPPER_CASE_CONSTANT)并始终如一地使用它。此外,不要使用标准 API 的现有类的名称,将其命名为更具体的用途。这非常令人困惑。 5) 源代码中的一个空白行是永远需要的。{之后或}之前的空行通常也是多余的。 -
.. 6) 而不是使用
JLabel/MouseListener组合。为了显示图像,我建议使用(可能未装饰)JButton和ActionListener。默认情况下,按钮可以获得键盘焦点,并且动作侦听器将对鼠标和键盘输入做出反应。
标签: java swing user-interface awt jscrollpane