java - Java - 使用 Swing 创建连续的图像幻灯片
问题描述
我不知道如何在标题中正确命名我的问题,但我希望我的图像可以表达我正在寻找的内容:
所以我想要完成的是,例如,您有两张图片,如上所示,以及旁边有一张幻灯片的对象[图片中名为 (1)]
根据幻灯片 (1) 的进度/值,图像 A 是否滑开,图像 B 是否会弹出。
一旦幻灯片到达底部,IMAGE B将完全占据显示区域并且IMAGE A被隐藏。反之亦然,幻灯片向上移动。
是否知道如何在 Swing 中使用 Java 创建这样的东西?我希望我的解释足够准确,可以理解。
感谢您的帮助 :)
编辑 1: 这是我实现的代码 @camickr 我认为它只能通过设置视图面板来工作。我按照你的指示做错了吗?
JPanel bigPanel = new JPanel(new FlowLayout(FlowLayout.CENTER, 5, 20));
JPanel displayPanel = new JPanel();
JScrollPane scrollPane = new JScrollPane();
[...]
displayPanel.setLayout(new BoxLayout(displayPanel, BoxLayout.X_AXIS));
JLabel label1 = new JLabel(new ImageIcon("R:\\imgA.jpg"));
JLabel label2 = new JLabel(new ImageIcon("R:\\imgB.jpg"));
displayPanel.add(label1);
displayPanel.add(label2);
scrollPane.setViewportView(displayPanel);
bigPanel.add(scrollPane);
解决方案
- 为图像创建两个
JLabels
,每个都有一个ImageIcon
。 JPanel
使用水平将每个标签添加到BoxLayout
- 将面板添加到
JScrollPane
- 将滚动窗格添加到框架中。
如果面板没有完全填满滚动窗格的可用空间,滚动窗格将自动显示滚动条。
编辑:
您发布的代码不是“MRE”:
我们无法编译该代码,因此我们不知道如何使用代码的确切上下文。
文本字段的意义何在?你的问题是关于滚动两张图片。因此,文本字段与所述问题无关。
我们无权访问您的图像,因此也不应将其包含在“MRE”中。
您问题的基础是滚动两个标签的能力。因此,要对此进行测试,您只需要以下内容:
JLabel red = new JLabel("Image 1");
red.setOpaque(true);
red.setBackground( Color.RED );
red.setPreferredSize( new Dimension(200, 200) ); // for testing only
JLabel blue = new JLabel("Image 2");
...
JPanel displayPanel = new JPanel();
displayPanel.setLayout(new BoxLayout(displayPanel, BoxLayout.X_AXIS));
JScrollPane scrollPane = new JScrollPane(displayPanel);
frame.add(scrollPane);
frame.pack();
frame.setVisible(true);
使用上述内容作为基础创建一个适当的程序。
显示框架时,图像将以全尺寸显示。缩小框架,滚动条就会出现。
该解决方案并不完全符合您的要求,但它向您展示了如何使用默认组件来实现滚动效果。我个人发现使用水平滚动条而不是使用垂直滑块从右到左滚动图像更直观。
推荐阅读
- java - 使用 BufferedInputStream 读取文件
- dart - 当我在从文件中读取文本中使用转换时,飞镖附加到文件
- angular - Angular Material mat-checkbox 未显示
- haskell - 堆栈设置:在路径上找不到名为 git 的可执行文件
- javascript - 将块绑定到表格中的单元格
- mysql - 如何在 Mosaic 中创建与任何外部数据库的连接?
- ios - Unity - 分发构建崩溃 - EXC_BAD_ACCESS - KERN_INVALID_ADDRESS
- python - 无法以橙色运行主题建模 - 文本挖掘插件中不显示图标
- php - Laravel 在 Blade 上使用外键获取另一个表的值
- android - (已解决)getUid 只能从同一个库组中调用(groupId=com.google.firebase)