2015-03-13 86 views
0

我已经创建了一个框架,其中包含一些图片,我想添加一个效果,当鼠标进入图片区域时,它会变得更暗或更亮,就像鼠标进入按钮区域时一样从FXML文件生成的代码:为javafx中的imageview设置效果

public class FrameController implements Initializable { 
@FXML 
private GridPane album; 
ImageView im; 

/** 
* Initializes the controller class. 
*/ 
@Override 
public void initialize(URL url, ResourceBundle rb) { 
    // TODO 
}  

@FXML 
private void mouseEntered(MouseEvent event) { 
    System.out.println(event.getSource()); 
    im = (ImageView) event.getSource(); 
    Glow selectGlow = new Glow(1.7f); 
    im.setOnMouseEntered(new EventHandler<MouseEvent>() { 

    @Override 
    public void handle(MouseEvent event) { 
    im.setEffect(selectGlow); 
    } 
    }); 
} 

} 

,但我有两个问题:

1)这是非常缓慢,有时似乎当我上的图片,因为效果确实是鼠标处理程序不叫不改变

2)我不知道我应该使用哪种效果为了在鼠标进入图片区域时使图片变暗

回答

1

性能取决于效果。如果你真的只想改变亮度,你可以。 G。使用ColorAdjust这样的:

public class ImageTest extends Application { 

    public static void main(String[] args) { 
     launch(args); 
    } 

    @Override 
    public void start(Stage primaryStage) { 

     primaryStage.setTitle("Hello World!"); 

     Group root = new Group(); 

     Image image = new Image("http://upload.wikimedia.org/wikipedia/commons/thumb/4/41/Siberischer_tiger_de_edit02.jpg/320px-Siberischer_tiger_de_edit02.jpg"); 


     GridPane gridPane = new GridPane(); 

     gridPane.add(createImageView(image), 0,0); 
     gridPane.add(createImageView(image), 1,0); 
     gridPane.add(createImageView(image), 0,1); 
     gridPane.add(createImageView(image), 1,1); 


     root.getChildren().add(gridPane); 

     primaryStage.setScene(new Scene(root, 800, 600)); 
     primaryStage.show(); 
    } 

    private ImageView createImageView(Image image) { 

     ImageView imageView = new ImageView(image); 

     ColorAdjust colorAdjust = new ColorAdjust(); 
     colorAdjust.setBrightness(-0.5); 

     imageView.addEventFilter(MouseEvent.MOUSE_ENTERED, e -> { 

      imageView.setEffect(colorAdjust); 

     }); 
     imageView.addEventFilter(MouseEvent.MOUSE_EXITED, e -> { 
      imageView.setEffect(null); 
     }); 

     return imageView; 
    } 
} 

enter image description here

+0

感谢您的答复,影响工作正常,但仍需要一段时间才能生效,我的意思是,当我是一个形象,我需要等待大约一秒钟图像变暗 – Yashar 2015-03-13 07:23:52

+0

你的系统是什么?在我的身上它是即刻,毫不拖延的。 – Roland 2015-03-13 07:31:04

+0

我解决了这个问题,我错过了部分代码,再次感谢 – Yashar 2015-03-13 07:53:42