Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>Well, actually that positioning inside JTabbedPane is not supported in Swing. But you can always make some street magic with layouts and layers:</p> <pre><code>public static void main ( String[] args ) { try { UIManager.setLookAndFeel ( UIManager.getSystemLookAndFeelClassName () ); } catch ( Throwable e ) { e.printStackTrace (); } JFrame frame = new JFrame (); frame.setUndecorated ( true ); frame.setLayout ( new LayoutManager () { private List&lt;Component&gt; special = new ArrayList&lt;Component&gt; (); public void addLayoutComponent ( String name, Component comp ) { if ( name != null ) { special.add ( comp ); } } public void removeLayoutComponent ( Component comp ) { special.remove ( comp ); } public Dimension preferredLayoutSize ( Container parent ) { Dimension ps = new Dimension (); for ( Component component : parent.getComponents () ) { if ( !special.contains ( component ) ) { Dimension cps = component.getPreferredSize (); ps.width = Math.max ( ps.width, cps.width ); ps.height = Math.max ( ps.height, cps.height ); } } return ps; } public Dimension minimumLayoutSize ( Container parent ) { return preferredLayoutSize ( parent ); } public void layoutContainer ( Container parent ) { Insets insets = parent.getInsets (); for ( Component component : parent.getComponents () ) { if ( !special.contains ( component ) ) { component.setBounds ( insets.left, insets.top, parent.getWidth () - insets.left - insets.right, parent.getHeight () - insets.top - insets.bottom ); } else { Dimension ps = component.getPreferredSize (); component.setBounds ( parent.getWidth () - insets.right - 2 - ps.width, insets.top + 2, ps.width, ps.height ); } } } } ); final JTabbedPane tabbedPane = new JTabbedPane (); tabbedPane.addTab ( "Tab1", new JLabel () ); tabbedPane.addTab ( "Tab2", new JLabel () ); tabbedPane.addTab ( "Tab3", new JLabel () ); frame.add ( tabbedPane ); final JLabel label = new JLabel ( "Close X" ); label.addMouseListener ( new MouseAdapter () { public void mousePressed ( MouseEvent e ) { System.exit ( 0 ); } } ); frame.add ( label, "special", 0 ); frame.setSize ( 200, 150 ); frame.setLocationRelativeTo ( null ); frame.setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE ); frame.setVisible ( true ); } </code></pre> <p>This will work anywhere without any problems. Just be aware that label will be always in top right corner and will not position itself (unless you modify the code to support more "features") on other OS LaF's like Mac OS laf where tabs might be in the middle. Also it will be painted over tabs if they will cross with label.</p> <p>So you will get something like this:</p> <p><img src="https://i.stack.imgur.com/lgZuT.png" alt="enter image description here"></p> <p>Anyway, you can easily modify applied to JLabel bounds inside the layout to make some side-spacing and such...</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload