Blurry render of SwingNode
Kevin Rushforth
kevin.rushforth at oracle.com
Sat Aug 22 19:28:38 UTC 2020
Actually, someone already did file a bug report a couple days ago (I see
it in our internal incident tracker). Once it is transferred to the JDK
project, I'll add the standalone test program from this email thread to
the bug report, which should help in narrowing it down.
Thanks.
-- Kevin
On 8/22/2020 11:40 AM, Michael Paus wrote:
> Hi,
> this is not a bug reporting list. Please file your bug report here
> https://bugs.java.com/bugdatabase/ instead.
> Best regards
> Michael
>
> Am 22.08.20 um 19:57 schrieb Thangalin:
>> Ahoy list,
>>
>> Running OpenJDK 14.0.1 on Windows 7, adding a SwingNode to a SplitPane
>> causes the contents of the SwingNode to appear blurry. There's a full
>> write-up with screen-shots at:
>> https://stackoverflow.com/q/63444771/59087
>>
>> Here's an SSCCE that demonstrates the problem:
>>
>> import javafx.application.Application;
>> import javafx.embed.swing.SwingNode;
>> import javafx.scene.Scene;
>> import javafx.scene.control.SplitPane;
>> import javafx.scene.layout.StackPane;
>> import javafx.scene.layout.VBox;
>> import javafx.stage.Stage;
>>
>> import javax.swing.*;
>> import java.awt.*;
>>
>> import static javafx.application.Platform.runLater;
>> import static javax.swing.SwingUtilities.invokeLater;
>>
>> public class FlyingSourceTest extends Application {
>> public static void main( String[] args ) {
>> Application.launch( args );
>> }
>>
>> @Override
>> public void start( Stage stage ) {
>> invokeLater( () -> {
>> stage.setTitle( "SSCCE" );
>>
>> final var size = 120f;
>> final var font = new javafx.scene.text.Font( "Arial", size );
>> final var bgStyle = "-fx-background-color: white";
>>
>> // FX label, StackPane
>> final var fxLabelTop = new javafx.scene.text.Text( "FX/FX" );
>> fxLabelTop.setFont( font );
>> final var fxStackPaneTop = new StackPane( fxLabelTop );
>>
>> // FX label, StackPane
>> final var fxLabelSplit = new javafx.scene.text.Text( "FX
>> LABEL" );
>> fxLabelSplit.setFont( font );
>> final var fxLabelPane = new StackPane();
>> fxLabelPane.getChildren().addAll( fxLabelSplit );
>> fxLabelPane.setStyle( bgStyle );
>>
>> // Swing label, StackPane
>> final var swingLabel = new JLabel( "SW LABEL" );
>> swingLabel.setBackground( Color.WHITE );
>> swingLabel.setOpaque( true );
>> swingLabel.setFont( swingLabel.getFont().deriveFont(
>> Font.PLAIN, size ) );
>> final var swingLabelNode = new SwingNode();
>> swingLabelNode.setContent( swingLabel );
>> final var swingLabelPane = new StackPane( swingLabelNode );
>> swingLabelPane.setStyle( bgStyle );
>>
>> final var fxSplitPane = new SplitPane(
>> fxLabelPane, swingLabelPane );
>> fxSplitPane.setPrefSize( 1280, 300 );
>>
>> final var root = new VBox();
>> root.getChildren().addAll( fxStackPaneTop, fxSplitPane );
>> root.setStyle( bgStyle );
>>
>> runLater( () -> {
>> final var scene = new Scene( root );
>> stage.setScene( scene );
>> stage.show();
>> } );
>> } );
>> }
>> }
>>
>> Closely compare the "L" from "SW LABEL" to the "L" from "FX LABEL".
>> You'll see that the "SW LABEL" ell has what looks like stronger
>> antialiasing applied.
>>
>> Changing the Graphics2D rendering hints on the JLabel has no effect.
>> Changing the JLabel's AffineTransform to shift by 0.5px worsens the
>> blurriness. Moving the SwingNode out of the SplitPane renders crisply,
>> as expected. The font colours and background do not affect the
>> outcome, but are there to make consistent output, which makes
>> comparing easier.
>>
>> This problem affects neither X11 (Linux) nor OSX, only Windows.
>>
>> Been trying to fix this for several days without success.
>>
>> Any ideas why embedding a SwingNode within a SplitPane causes a blurry
>> effect? And how can the problem be resolved?
>>
>> Thank you!
>
>
More information about the openjfx-dev
mailing list