2017-12-01 5 views
0

Ich versuche, einen Bildbrowser in Swing zu erstellen, der es einem Benutzer ermöglicht, ein Bild auszuwählen, und dann auf die rechte Hälfte des Bilds zu klicken, um zum nächsten Bild zu gelangen die Hälfte, um zur vorherigen zu wechseln.Erstellen Sie ein anklickbares Bild mit Swing

Ich habe versucht, dies mit MouseListeners zu tun, aber MouseClicked würde nicht registrieren, wenn ich pack(); verwendet, aber das verursachte mein Bild zu verschwinden, wenn ich die Benutzeroberfläche nicht zog.

Dies ist der Code, der verwendet wurde um das Bild anzuzeigen:

class ImageFrame extends JFrame 
{ 
    private final JFileChooser chooser; 
    private BufferedImage image = null; 
    int WIDTH = 1080; int HEIGHT = 620; 

    // ========================================== 
    // constructor 

    public ImageFrame (int width, int height) 
    { 
     // -------------------------------------- 
     // setup the frame's attributes 
     this.setTitle("Image-P3 Player"); 
     this.setSize(width,height); 

     // add a menu to the frame 
     addMenu(); 

     // -------------------------------------- 
     // setup the file chooser dialog 

     chooser = new JFileChooser(); 
     chooser.setCurrentDirectory(new File(".")); 
    } 
    addMouseListener(new MouseAdapter() 
     { 
     public void mouseClicked(MouseEvent e){ 
      System.out.println("Mouse clicked!"); 
      if(e.getButton() == 1){ 
       int x = e.getX(); 
       System.out.println("X: "+x); 
       if(x>540){ 
        System.out.println("Next image!"); 
       } 
       else{ 
        System.out.println("Previous image!"); 
       } 
      } 
     } 
    }); 

Dann gab es eine JMenu, die zu dieser Reihe von Verfahren geführt:

private void open() 
{ 
    File file = getFile(); 
    if(file != null) 
    { 
     displayFile(file); 
    } 
} 

private File getFile() 
{ 
    File file = null; 

    if (chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) 
    { 
     file = chooser.getSelectedFile(); 
    } 

    return file; 
} 

private void displayFile(File file) 
{ 
//some code to resize the image to the JFrame's dimensions 
} 

// ------------------------------------------ 
// Display Buffered Image 

public void displayBufferedImage(ImageIcon image) 
{ 
    this.setContentPane(new JScrollPane(new JLabel(image ))); 

    this.validate(); 
} 

Gibt es eine einfache Art und Weise hinzufügen der MouseListener zu JScrollPane oder JLabel, damit das auf der GUI angezeigte Bild Benutzerklicks registriert, ohne die Komponenten aus dem Gleichgewicht zu bringen?

+1

Erstellen Sie eine einzelne Instanz eines 'JLabel' als Instanz Feld , fügen Sie den 'MouseListener' hinzu. Ändern Sie die 'JLabel' 'Symbol' -Eigenschaft, anstatt neue Instanzen der Bezeichnung zu erstellen – MadProgrammer

+1

Rechte Hälfte/linke Hälfte? Klingt peinlich für mich. Ich würde eine Beschriftung verwenden, um die Bilder anzuzeigen, aber Schaltflächen auf beiden Seiten (mit Text basierend auf '<' and '>' oder ähnlich), die auf Maus oder Tastatur aktivieren können. –

Antwort

0

Dank MadProgrammer, das hat den Trick gemacht. Ich initialisiert und instanziiert JLabel mit anderen Variablen an der Spitze:

JLabel label = new JLabel(); 

und verwendet dann .setIcon(ImageIcon icon) auf dem JLabel in meinem displayBufferedImage Methode:

public void displayBufferedImage(ImageIcon image) 
{ 
    label.setIcon(image); 
    this.setContentPane(new JScrollPane(label)); 

    this.validate(); 
} 
+0

Wenn das Label bereits zur GUI hinzugefügt wurde, sind die letzten beiden Codezeilen in dieser Methode nicht erforderlich. Wenn dann nur noch eine Linie übrig bleibt, scheint die Methode überhaupt keinen Sinn zu haben. –

Verwandte Themen