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?
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
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. –