簡體   English   中英

如何制作可點擊的圖片?

[英]How to make a clickable image?

我完全一無所知,迷路了。 我最近開始用Java編程。 我想制作一個程序,顯示一個用戶可以單擊的圖像(帶有圖像的按鈕),然后播放聲音。 我看了很多教程,但是當我按照它們學習時,它們卻無法使用。 另外,我也不知道是否應該使用swing或javaFX或awt,或者是否僅需要為圖像和按鈕創建新文件。 請幫忙。

搜索更多: 在這里有答案:

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

確保/class/path/to/image.png在類路徑中。 如果它是硬盤驅動器中的映像,則必須首先加載它,如我鏈接的答案所述。

編輯 :將JavaFX中的@jewelsea示例轉換為Swing:

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);
    }

這是使用JavaFX的示例。 您的問題被標記為Swing,但問題文本中提到您正在考慮使用JavaFX,因此我想提供此解決方案,以便您可以看到JavaFX樣式實現的外觀。

愛情魔葯

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,所以我不會為此提供解決方案。 庫建議對於StackOverflow來說是不合時宜的 ,因此在這里我不會提供庫建議,並鼓勵您對潛在技術進行自己的研究,並確定最適合您的應用程序要求和技能的匹配項。

就我個人而言,最近我一直在嘗試Swing,並且我認為它相當直觀,至少在基礎級別上是如此。 您想要的是圖像對象的輪廓,並添加了偵聽器,以響應單擊/響應的響應。 像這樣: 在Java中將鼠標偵聽器添加到圖像或圖像圖標

或者,您可以使用秋千庫中的內置按鈕對象並為其設置圖像。 您仍然需要配置偵聽器以執行您希望執行的任何操作。 遵循以下原則: 如何將圖像添加到JButton

設置一個動作監聽器

我認為,如果您是初學者,則可以從swing和netbeans開始: 是一個簡單的教程,如何在swing中處理圖像:

其他好的教程:
文字: 這里
視頻: 這里

您應該使用Swing或JavaFX ...
AWT非常老,除非沒有其他方法,否則不應該使用(我聽說有時候在OSX上Swing會出現一些問題...)。
Swing是Java中最常見的GUI-Toolkit,但是Oracle宣布JavaFX將完全取代Swing。
在我看來,Swing易於啟動,因為有諸如eclipse window builder之類的工具,它使您可以在圖形界面中創建應用程序,但是JavaFX將來更可能被使用,因為它相對於搖擺(例如CSS皮膚等)。

因此,您基本上必須決定自己喜歡什么:

JavaFX將成為將來的工具包-Swing仍是-仍然是最常用的工具包,並提供更多支持等。

如果您使用的是Swing,我認為JLabel可以包含一個圖像-如果您添加mouseClicked偵聽器,則可能是這樣。

您可以將圖像對象包裝在錨標記內:

 <a href="http://www.w3schools.com"><img src="pic_mountain.jpg" alt="Mountain View" style="width:304px;height:228px;"></a> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM