javaswingjtabbedpane

Vertical orientation of JTabbedPane titles when the tab placement is set to LEFT


As you can see from the image below, the Java text is horizontal. What I would like to do is get a vertical orientation of the JTabbedPane Titles.

While googling, I found that the only way is to add extra library. But I was wondering if this can be done without any extra library?

I would like for Title1 and Title2 to be vertically oriented and not horizontally

enter image description here


Solution

  • you have to use Html syntax, for any changes to the disabled Tab too

    tabbedPane.addTab("<html>T<br>i<br>t<br>t<br>l<br>e<br>1</html>", panel1);  
    

    EDIT

    SSCCE for question about Html text formatting and alignment

    import java.awt.Color;
    import java.awt.Component;
    import java.awt.Dimension;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JTabbedPane;
    import javax.swing.JTextField;
    
    /**
     *
     * @author korbel
     */
    public class TestTabbedPane extends JFrame {
    
        private static final long serialVersionUID = 1L;
        private JTabbedPane tabbedPane;
    
        public TestTabbedPane() {
            tabbedPane = new JTabbedPane();
            tabbedPane.setPreferredSize(new Dimension(300, 200));
            getContentPane().add(tabbedPane);
            JPanel panel = new JPanel();
            tabbedPane.add(panel, "null");
            JTextField one = new JTextField("one");
            tabbedPane.add(one, "one");
            JTextField two = new JTextField("two");
            tabbedPane.add(two, "<html> T<br>i<br>t<br>t<br>l<br>e <br> 1 </html>");
            tabbedPane.setEnabledAt(2, false);
            /*int comp = tabbedPane.getComponentCount();
            for (Component sc : tabbedPane.getComponents()) {
            if (sc instanceof javax.swing.JLabel) {
            JLabel lbl = (JLabel) sc;
            lbl.setForeground(Color.red);
            }
            if (sc instanceof javax.swing.JPanel) {
            JPanel pnl = (JPanel) sc;
            pnl.setName(pnl.getName());
            }
            if (sc instanceof javax.swing.JTextField) {
            JTextField txt = (JTextField) sc;
            txt.setForeground(Color.blue);
            txt.setDisabledTextColor(Color.red);
            }
            }
            UIManager.put("TabbedPane.contentBorderInsets", new Insets(0, 0, 0, 0));
            UIManager.put("TabbedPane.highlight", new Color(255, 0, 0));
            UIManager.put("TabbedPane.lightHighlight", new Color(0, 255, 0));
            UIManager.put("TabbedPane.darkShadow", new Color(0, 255, 0));
            UIManager.put("TabbedPane.shadow",new Color(0, 0, 255));
            UIManager.put("TabbedPane.light" ,  new Color(0, 255, 0));
            UIManager.put("TabbedPane.foreground", new Color(0, 0, 0));
            UIManager.put("JTabbedPane.font", new Font("Dialog", Font.ITALIC, 12));
            UIManager.put("TabbedPane.selected", new Color(255, 0, 0));
            UIManager.put("disable", new Color(255, 0, 0));
            UIManager.put("TabbedPane.selectHighlight" , new Color(0, 0, 0));
            UIManager.put("TabbedPane.background",  new Color(0, 0, 0));
            SwingUtilities.updateComponentTreeUI(tabbedPane);*/
            tabbedPane.setTitleAt(2, "<html><font color="
                    + (tabbedPane.isEnabledAt(2) ? "black" : "red") + ">"
                    + tabbedPane.getTitleAt(2) + "</font></html>");
            tabbedPane.setTabPlacement(JTabbedPane.LEFT);
        }
    
        public static void main(String args[]) {
            TestTabbedPane frame = new TestTabbedPane();
            frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
            frame.pack();
            frame.setVisible(true);
        }
    }