使用Swing

时间:2017-12-01 04:57:51

标签: java swing mouseevent jlabel jscrollpane

我试图在Swing中创建一个允许用户选择图像的图像浏览器,然后单击图像的右半部分前进到下一个图像,然后单击左半部分移动到上一个。

我尝试使用MouseListeners执行此操作,但MouseClicked不会注册,除非我使用pack();,但这导致我的图像消失,除非我拖出UI。

这是用于显示图像的代码:

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导致了这一系列的方法:

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

是否有一种简单的方法可以将MouseListener添加到JScrollPane或JLabel中,以便GUI中显示的图像将注册用户点击而不会使组件失控?

1 个答案:

答案 0 :(得分:0)

感谢MadProgrammer,这就是诀窍。我在顶部用其他变量初始化并实例化了JLabel:

JLabel label = new JLabel();

然后在.setIcon(ImageIcon icon)方法中使用displayBufferedImage在JLabel上:

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

    this.validate();
}