【发布时间】:2015-12-16 07:33:49
【问题描述】:
这是我的完整代码和一些解释。
public class SlideShow extends javax.swing.JFrame {
JPanel slides;
CardLayout layoutManager;
private JButton btnPrev;
private JButton btnNext;
private JButton btnHome;
private JButton btnSound;
public SlideShow() {
super();
setLayout(new FlowLayout(FlowLayout.CENTER, 10, 10));
btnPrev = new javax.swing.JButton();
btnNext = new javax.swing.JButton();
btnHome = new javax.swing.JButton();
btnSound = new javax.swing.JButton();
btnPrev.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/back+button.png")));
btnNext.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/next2.png")));
btnHome.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/home_icons.png")));
btnSound.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/Media-Controls-Volume-Down-icon.png")));
slides = new JPanel();
slides.setBackground(Color.WHITE);
slides.setBorder(BorderFactory.createLineBorder(Color.BLACK));
slides.setLayout(layoutManager = new CardLayout(0,0));
for(int i=2; i<=24; i++){
slides.add(i+".png", new JLabel(new ImageIcon(getClass().getResource("/resources/"+i+".png"))));
}
add(slides);
add(btnHome);
add(btnPrev);
add(btnNext);
add(btnSound);
btnPrev.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
layoutManager.previous(slides);
}
});
btnNext.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
layoutManager.next(slides);
}
});
btnHome.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
close();
Frame fr = new Frame();
fr.setVisible(true);
}
});
btnSound.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
music("././build/classes/resources/test.wav");
}
});
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(700,530);
}
public void close(){
super.dispose();
}
public static void music(String path)
{
AudioStream BGM;
AudioData MD;
AudioDataStream audiostream;
try{
BGM = new AudioStream (new FileInputStream(path));
MD = BGM.getData();
audiostream = new AudioDataStream(MD);
AudioPlayer.player.start(audiostream);
}catch(IOException error){}
}
public static void main(String args[]) {
SlideShow frame = new SlideShow();
frame.setVisible(true);
}
}
我的JFrame 中有一个包含多张图片的幻灯片。每张幻灯片都有一个按钮,当它点击时会输出一些声音。这些幻灯片在同一个 JFrame 中调用。所以,我不必为每张幻灯片制作很多 JFrame。我想为每张幻灯片制作不同的声音。我所要做的就是调用幻灯片图像的路径来匹配声音。
我的情况是,基本上,我想缩短 ImageIcon 的变量,以便我可以返回一个特定的路径,如 5.png 来插入声音。但是,如果不调用 ImageIcon 中的完整路径,我就无法做到这一点,而且不知何故,即使我调用了完整路径,它也根本不起作用。
所以,如果我可以在slides 处获得特定路径作为变量或类似的东西,我可以使用它来使用相同的按钮调用不同的声音。如何缩短它?
或者,有没有办法从slides 获取特定变量?但是如何调用变量?这个应用程序中有 24 张幻灯片图像,如何区分它?
我在for loop 中测试了这段代码JOptionPane.showMessageDialog(null, "Test!");,看起来这段代码在实际幻灯片出现之前输出了24 次。所以,这意味着for loop 只输入图像,我不知道如何调用它,所以我可以做出类似if else 的语句来将声音放在不同的幻灯片上。
【问题讨论】:
-
你的代码很短。您能否添加更多细节,例如框架和按钮的构造。
slides是类似于JTabbedPane的组件还是自定义数据结构?当询问由您的代码引起的问题时,如果您提供人们可以用来重现问题的完整代码,您将获得更好的答案(有关更多信息,请参阅stackoverflow.com/help/mcve)。 -
@FreekdeBruijn 我编辑了我的代码
-
你能在stratup加载所有声音还是只在运行时加载?
-
@user1803551 我只能在运行时加载,这意味着在我点击按钮期间
-
好的,剩下的就是问你究竟你在做什么,因为你在问题中提到了许多不同的东西。
标签: java swing netbeans imageicon