如何制作可点击的图片?

时间:2016-04-27 19:37:06

标签: java image swing jbutton

我完全无能为力,迷失方向。我最近开始编写Java编程。我想制作一个程序,显示用户可以点击的图像(带图像的按钮),然后播放声音。我已经看了很多教程,当我关注他们时他们不会工作。此外,我不知道是否应该使用swing或javaFX或awt,或者我是否只需要为图像和按钮创建新文件。请帮忙。

6 个答案:

答案 0 :(得分:2)

搜索更多:它有一个答案here

Icon img = new ImageIcon("/class/path/to/image.png");
JButton btn = new JButton(img);

确保/class/path/to/image.png在类路径中。如果它是您硬盘中的图像,则必须先加载它,如我链接的答案所述。

编辑:JavaFX中的@jewelsea示例为Swing:

Screenshot in Swing

public class ImageAudioPlayer extends JFrame {

    private static final String BUTTON_ICON_LOC =
            "http://icons.iconarchive.com/icons/mirella-gabriele/fantasy-mediaeval/128/Poison-red-icon.png";
    private static final String AUDIO_FILE_LOC =
            "http://soundbible.com/grab.php?id=1019&type=wav";

    public ImageAudioPlayer() throws MalformedURLException {
        super("Audion button");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Container cp = getContentPane();
        Icon icon = new ImageIcon(new URL(BUTTON_ICON_LOC));
        JButton button = new JButton(icon);
        cp.add(button, BorderLayout.CENTER);
        button.addActionListener(new ActionListener() {
            @Override public void actionPerformed(ActionEvent e) {
                playAudio();
            }
        });
    }

    private void playAudio() {
        // Not nearly as easy as JavaFX, and cannot play MP3
        try {
            URL url = new URL(AUDIO_FILE_LOC);
            final Clip clip = AudioSystem.getClip();
            AudioInputStream ais = AudioSystem.getAudioInputStream(url);
            clip.open(ais);
            clip.start();
            clip.addLineListener(new LineListener() {
                @Override public void update(LineEvent event) {
                    if (event.getType() == LineEvent.Type.STOP)
                        clip.close();
                }
            });
        } catch (UnsupportedAudioFileException | IOException | LineUnavailableException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) throws MalformedURLException {
        ImageAudioPlayer iap = new ImageAudioPlayer();
        iap.pack();
        iap.setVisible(true);
    }

答案 1 :(得分:2)

以下是使用JavaFX的示例。您的问题标记为Swing,但问题文本提到您正在考虑使用JavaFX,因此我认为我提供此解决方案以便您可以看到JavaFX样式实现的样子。

love potion

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.image.*;
import javafx.scene.layout.StackPane;
import javafx.scene.media.AudioClip;
import javafx.stage.Stage;

public class ImageAudioPlayer extends Application {
    private static final String BUTTON_ICON_LOC =
            "http://icons.iconarchive.com/icons/mirella-gabriele/fantasy-mediaeval/128/Poison-red-icon.png";
    private static final String AUDIO_FILE_LOC =
            "http://soundbible.com/mp3/Power_Up_Ray-Mike_Koenig-800933783.mp3";

    @Override
    public void start(Stage stage) throws Exception {
        final AudioClip audioClip = new AudioClip(AUDIO_FILE_LOC);
        final ImageView graphic = new ImageView(new Image(BUTTON_ICON_LOC));

        Button button = new Button(null, graphic);
        button.setStyle("-fx-base: mistyrose;");
        button.setOnAction(event -> audioClip.play());

        StackPane layout = new StackPane(button);
        layout.setPadding(new Insets(10));
        stage.setScene(new Scene(layout));
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

我不太了解Swing,所以我不能为此提供解决方案。 Library recommendations are off-topic for StackOverflow,所以我不会在这里提供图书馆推荐,并鼓励您自己研究潜在的技术,并决定最适合您的应用需求和技能的匹配。

答案 2 :(得分:1)

就个人而言,我最近一直在尝试使用Swing,我觉得它相当直观,至少在基础层面。 你想要的是一个图像对象的线条,添加了一个监听器,用于点击的反应/你想要做出的任何反应。 像这样的东西: Adding a mouse listener to image or image Icon in java

或者您可以使用swing库中的内置按钮对象并为其设置图像。您仍然需要配置侦听器以执行您希望的任何操作。 沿着这些方向: How do I add an image to a JButton

Setting up an action listener

答案 3 :(得分:0)

我认为如果你是初学者,你可以从swing和netbeans开始:here是一个简单的教程,如何处理swing中的图像:

其他好的教程:
文字:here
视频:here

答案 4 :(得分:0)

你应该使用Swing或JavaFX ......
AWT很老了,除非没有别的办法,否则不应该使用(我听说有时在OSX上有一些Swing的问题......)。
Swing是Java中最常见的GUI-Toolkit,但Oracle宣布,JavaFX将完全取代Swing 在我看来,Swing更容易启动,因为有像eclipse窗口构建器这样的工具,它使您能够在图形界面中创建应用程序,但JavaFX更有可能在未来使用,因为它有一些很大的改进Swing(如CSS皮肤等)。

所以你基本上必须决定你更喜欢什么:

JavaFX将成为未来的工具包 - Swing仍然是最常用的工具包,有更多的支持等。

如果你使用Swing,我认为JLabel可以包含一个图像 - 如果你添加一个mouseClicked监听器,那可能就是这样......

答案 5 :(得分:-3)

您可以将图像对象包装在锚标记内:



public function test($mode) {
    if($mode=='on'){
        function1();

    }elseif($mode=='off'){
        function1();
        echo "<br>";
        function2();
    }
    else{
        die('Error: Only "on" and "off" permitted for test');
    }
}
&#13;
&#13;
&#13;