最近,我们的 Java-FX 应用程序无法再从剪贴板读取图像。例如,用户在 Microsofts-Paint 中选择图像的一部分并按复制。我不是在谈论复制的图像文件,它们工作得很好。
我很确定它过去已经有效,但我仍然需要验证这一点。尽管如此,我还是创建了一个小示例,并将 AWT 与 FX 剪贴板进行比较以重现该行为:
public class ClipBoardFxApp extends Application
{
@Override
public void start( final Stage primaryStage )
{
final BorderPane root = new BorderPane();
final ImageView view = new ImageView();
final Button awtButton = new Button( "AWT" );
awtButton.setOnAction( event -> loadImageFromAwtClipboard( view ) );
final Button javaFXButton = new Button( "JavaFX" );
javaFXButton.setOnAction( event -> loadImageFromJavaFXClipboard( view ) );
root.setCenter( view );
final BorderPane buttonPane = new BorderPane();
buttonPane.setLeft( awtButton );
buttonPane.setRight( javaFXButton );
root.setBottom( buttonPane );
final Scene scene = new Scene( root, 400, 400 );
primaryStage.setScene( scene );
primaryStage.show();
}
private void loadImageFromJavaFXClipboard( final ImageView view )
{
System.out.println( "FX-Clipboard: Try to add Image from Clipboard..." );
final Clipboard clipboard = Clipboard.getSystemClipboard();
if ( clipboard.hasImage() )
{
final Image image = clipboard.getImage();
view.setImage( image );
}
else
{
new Alert( AlertType.INFORMATION, "No Image detected im Clipboard!" ).show();
}
}
private void loadImageFromAwtClipboard( final ImageView view )
{
System.out.println( "AWT-Clipboard: Try to add Image from Clipboard..." );
try
{
final Transferable t = Toolkit.getDefaultToolkit().getSystemClipboard().getContents( null );
if ( t != null && t.isDataFlavorSupported( DataFlavor.imageFlavor ) )
{
final java.awt.image.BufferedImage img = (java.awt.image.BufferedImage) t.getTransferData( DataFlavor.imageFlavor );
final Image image = SwingFXUtils.toFXImage( img, null );
view.setImage( image );
}
else
{
new Alert( AlertType.INFORMATION, "No Image detected im Clipboard!" ).show();
}
}
catch ( final UnsupportedFlavorException | IOException e )
{
e.printStackTrace();
}
}
public static void main( final String[] args )
{
launch( args );
}
}
AWT-Clipboard 按预期工作,而 Java-FX 剪贴板仅显示图像大小正确的白色图像,但没有内容。我更愿意保持外汇方式,那么有没有任何解决方案或任何解释,我在这里可能做错了什么?
None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)