2017-12-01 45 views
0

스윙에서 이미지를 선택하고 이미지의 오른쪽 절반을 클릭하여 다음 이미지로 이동하고 왼쪽을 클릭 할 수있는 이미지 브라우저를 만들려고합니다. 이전 반으로 이동하려면 절반.스윙으로 클릭 가능한 이미지 만들기

MouseListeners를 사용하여이 작업을 시도했지만 MouseClicked는 pack();을 사용하지 않으면 등록하지 않지만 UI를 드래그하지 않으면 이미지가 사라집니다. 추가 할 수있는 간단한 방법이 있나요

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

:

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

은 그런 방법이 시리즈로 이끄는 JMenu를 있었다 :

는 이미지를 표시하는 데 사용 된 코드입니다 JScrollPane 또는 JLabel 에의 MouseListener를 사용하면 (자), GUI에 표시되고있는 이미지가 컴퍼넌트를 튕겨 내지 않고 사용자 클릭을 등록하도록 (듯이) 할 수가 있습니다.

+1

인스턴스 필드로'JLabel'의 단일 인스턴스를 생성 'MouseListener'를 추가하십시오. – MadProgrammer

+1

레이블의 새로운 인스턴스를 생성하는 대신'JLabel'의'icon' 속성을 변경하십시오. 오른쪽/왼쪽 절반? 어색하게 들린다. 레이블을 사용하여 이미지를 표시 할 수 있지만 마우스 또는 키보드 활성화에 응답 할 수있는 단추 ('<' and '>'또는 이와 유사한 텍스트 기반)가 있습니다. –

답변

0

감사합니다. MadProgrammer, 그 속임수를했습니다. 나는 초기화 상단에 다른 변수와 JLabel의 인스턴스를 생성 :

JLabel label = new JLabel(); 

그리고 내 displayBufferedImage 방법에 JLabel의에 .setIcon(ImageIcon icon)을 사용 :

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

    this.validate(); 
} 
+0

레이블이 이미 GUI에 추가 된 경우 해당 메소드의 마지막 두 줄은 필요하지 않습니다. 그런 다음 단 한 줄만 남았습니다.이 방법에서는 많은 부분이 보이지 않습니다. –