This website uses cookies for visitor traffic analysis. By using the website, you agree with storing the cookies on your computer.More information

MacOS JInternalFrame border problem

With new MacOS versions, the good old Aqua LaF has some problems.

If you create a simple MDI application with JDesktopPane and JInternalFrame, following problem will occur:

Default JInternalFrame

Default JInternalFrame

The code for our problem:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.Rectangle;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JTabbedPane;
import javax.swing.border.Border;
import javax.swing.border.CompoundBorder;
import javax.swing.plaf.UIResource;

public class TestJVxTabbedPane
{
    public static void main(String[] args) throws Exception
    {
        new TestJVxTabbedPane();
    }
   
    public TestJVxTabbedPane()
    {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(new BorderLayout());
       
        JDesktopPane dpan = new JDesktopPane();
        dpan.setBackground(Color.white);
               
        JInternalFrame fr = new JInternalFrame();
        fr.setTitle("Super Frame");
        fr.setPreferredSize(new Dimension(200, 200));
        fr.pack();
        fr.setResizable(true);
        fr.setMaximizable(true);
        fr.setIconifiable(true);
        fr.setClosable(true);
        fr.setVisible(true);
               
        dpan.add(fr);
       
        frame.getContentPane().add(dpan, BorderLayout.CENTER);
        frame.setSize(500, 400);
        frame.setLocationRelativeTo(null);

        frame.setVisible(true);      
    }
}

(nothing special, a simple JInternalFrame, JDesktopPane combination)

We don't like bad looking UIs, so we fixed the problem in JVx:

JInternalFrame without border problem

JInternalFrame without border problem

The fix will work without JVx as well. We made tests with different MacOS versions and our solution worked in all our tests.

2 Responses to “MacOS JInternalFrame border problem”

  1. Nicolo says:

    And what is the workaround without using JVx??

Leave a Reply

Spam protection by WP Captcha-Free