Aligning icon to the left in JTabbedPane in Nimbus Look and Feel

前端 未结 2 447
鱼传尺愫
鱼传尺愫 2020-12-21 03:06

I was creating an application with JTabbedPane using Nimbus look and feel

I have used this code to place tabs:

pane.addTab(\"Welcome\",n         


        
相关标签:
2条回答
  • 2020-12-21 03:35

    There is a simpler solution using HTML formatting. This is an example using html code to format text, but you can also format other elements within the tab:

    final String PRE_HTML = "<html><p style=\"text-align: left; width: 230px\">"; 
    final String POST_HTML = "</p></html>"; 
    
    tabbedpane.setTitleAt(0, PRE_HTML + "your title" + POST_HTML);
    tabbedpane.setTitleAt(2, PRE_HTML + "your title 2" + POST_HTML);
    
    0 讨论(0)
  • 2020-12-21 03:37

    You can set a custom component for rendering the tab title, through JTabbedPane.setTabComponentAt(int index, Component component) method:

    Sets the component that is responsible for rendering the title for the specified tab. A null value means JTabbedPane will render the title and/or icon for the specified tab. A non-null value means the component will render the title and JTabbedPane will not render the title and/or icon.

    Note: The component must not be one that the developer has already added to the tabbed pane.

    For instance you can do this:

    JLabel label = new JLabel("Tab1");
    label.setHorizontalTextPosition(JLabel.TRAILING); // Set the text position regarding its icon
    label.setIcon(UIManager.getIcon("OptionPane.informationIcon"));
    
    JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.LEFT);
    tabbedPane.addTab(null, new JPanel());
    tabbedPane.setTabComponentAt(0, label); // Here set the custom tab component
    

    Screenshot 1:

    enter image description here


    Note: using this feature you can set any Component as you wish. For instance you can make a JPanel with a JButton to close the tab:

    final JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.LEFT);
    
    ActionListener actionListener = new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            JButton button = (JButton)e.getSource();
            for(int i = 0; i < tabbedPane.getTabCount(); i++) {
                if(SwingUtilities.isDescendingFrom(button, tabbedPane.getTabComponentAt(i))) {
                    tabbedPane.remove(i);
                    break;
                }
            }
        }
    };
    
    JLabel label = new JLabel("Tab1", UIManager.getIcon("OptionPane.informationIcon"), JLabel.RIGHT);        
    JButton closeButton = new JButton("X");
    closeButton.addActionListener(actionListener);
    
    JPanel tabComponent = new JPanel(new BorderLayout());
    tabComponent.add(label, BorderLayout.WEST);
    tabComponent.add(closeButton, BorderLayout.EAST);
    
    tabbedPane.addTab(null, new JPanel());
    tabbedPane.setTabComponentAt(0, tabComponent); // Here set the custom tab component
    

    Screenshot 2:

    enter image description here


    Update

    You might want to see this topic as well: JTabbedPane: tab placement set to LEFT but icons are not aligned

    0 讨论(0)
提交回复
热议问题