我试图在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中显示的图像将注册用户点击而不会使组件失控?
答案 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();
}