Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Swing rendering appears broken in JDK 1.8, correct in JDK 1.7

I have installed IntelliJ IDEA (13.1.1 #IC-135.480) and JDK 1.8.0 (x64) and I generated some GUI with the GUI Form designer.

Then I ran the code and realized that something is not alright.

Here is a Screenshot of my GUI: Buggy Rendering JDK 1.8.0

The rendering of the Font seems to be not OK. Additionally the Button looses its Text, when I move my mouse over it.

So I installed JDK 1.7.0_40 (x64), recompiled the Project and ran it again.

The following Form appears, when i use JDK 1.7: Rendering OK JDB 1.7.0_40

The Rendering seems to be OK and the Button is also OK.

So I installed the newest Graphics and Chipset drivers and much more, but the problem still exists. Have you ever had such problems with Java Swing UIs? Could you help me to fix my problems? Any help would be greatly appreciated.


UPDATE:

I created a small Project with only 1 JTextArea and 1 JButton and i have the same rendering problems.

According to Andrew Thompson i changed the setSize() and I start from EDT. The Example below:

package at.maeh.java.client.simpleTextClient;  import javax.swing.*; import java.awt.*;  public class SimpleClient extends JFrame {     private JPanel panel1;     private JTextArea textArea1 = new JTextArea();     private JButton button1 = new JButton();      public SimpleClient() {         super("SimpleClient");          // Panel         panel1 = new JPanel();         panel1.setLayout(new FlowLayout());          // BUtton         button1.setText("TestButton");          // TextArea         textArea1.setColumns(40);         textArea1.setRows(15);          // Add Components         panel1.add(textArea1);         panel1.add(button1);          // Add to Frame         this.getContentPane().add(panel1);          // pack and set Visible         pack();         setVisible(true);          System.out.println("Constructor EDT: " + SwingUtilities.isEventDispatchThread());     }      public static void main(String[] args) {         SwingUtilities.invokeLater(SimpleClient::new);          System.out.println("Main EDT: " + SwingUtilities.isEventDispatchThread());     } } 

The result is a simple JFrame with the Components in it.

SimpleClient -> Screenshot immediately after Start

When I write some Text, or moove my mousePointer over the Button the components get rendered like this (Text: testsentence.123; Button-Label: TestButton)

after writing - or mouse over

like image 774
duffy356 Avatar asked Mar 29 '14 22:03

duffy356


People also ask

Is Swing included in JDK?

Originally distributed as a separately downloadable library, Swing has been included as part of the Java Standard Edition since release 1.2. The Swing classes and components are contained in the javax. swing package hierarchy.

Is Swing still used in Java 2021?

Absolutely yes. Legacy swing applications are still supported and enhanced.

Will Swing be removed from JDK?

"JSR-296 (Swing Application Framework) is no longer developed and will not become part of the offical Java Development Kit as was originally planned. You can still use the Swing Application Framework library as it is, but no further development is expected."


1 Answers

For those whose problem has not been solved; try this solution:

Set the global environment variable "J2D_D3D" to "false" inside the OS. According to Sun, this setting is used to turn off the Java 2D system's use of Direct3D in Java 1.4.1_02 and later.

ie: simply create a environmental variable with name "J2D_D3D" and value "false" without the quotes.

this has solved my rendering problems, hope it does yours also.

like image 194
25mhz Avatar answered Sep 24 '22 05:09

25mhz