简体   繁体   中英

Java Swing GUI, customising JtabbedPane style

I am a beginner in swing. I tried to create a tabbed window as part of the GUI for my project. But as shown below, the buttons for navigating tabs shows some sort of a border. Is there a way I can remove these borders? See the attached image to see the problem.

在此输入图像描述

The code for the GUI is as follows

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Toolkit;
import javax.swing.*;
import javax.swing.border.EmptyBorder;

public class tst {    
    /**
     * @param args the command line arguments
     */
    public static String  generateHtml(String tabButtonLabel,String style) {
        /*@@Generates HTML for the tab button when the button label is given*/
        String ret = "<html><body style = '"+style+"'>"+tabButtonLabel+"</body></html>";
        return ret;
    }

    public static void main(String[] args) {
        // TODO code application logic here
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        JFrame frame = new JFrame("tst");
        frame.setVisible(true);
        frame.setSize(screenSize);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        /*Groups tab*/            
        JPanel groups = new JPanel();
        groups.setBackground(Color.gray);            
        /*Settings Tab*/            
        JPanel settings = new JPanel();            
        /*About Tab*/            
        JPanel about = new JPanel();            
        /*Tabbed pane to hold all panels*/
        JTabbedPane tabbedPane = new JTabbedPane();             
        /*Tabbed Pane CSS*/
        String tabButtonCss = "margin:0;width:110px;height:10px;border-radius:3px;padding:10px;background:#fff;text-align:center;border:none;";

        tabbedPane.setVisible(true);
        tabbedPane.add(generateHtml("Groups",tabButtonCss),groups);
        tabbedPane.add("Settings",settings);
        tabbedPane.add("About",about);            
        /*Tab styles*/
        tabbedPane.setBackground(Color.gray);
        tabbedPane.setForeground(Color.white);
        tabbedPane.setBounds(0, 0, 0,0);
        //tabbedPane.setBorder(new EmptyBorder(-10,-20,-10,0));            
        frame.add(tabbedPane);
    }
}

As noted by @Smit, it is all down to the CSS. Note also that the Java HTML/CSS engine does not recognize the '3 digit' style shortcut of #fff for colors. To get white we must use #ffffff .

CSS1CSS2CSS3

import java.awt.*;
import javax.swing.*;

class ExampleCSS {

    public static void showStyle(String style) {
        JPanel gui = new JPanel(new BorderLayout());

        String html1 = "<html><body style = '"+style+"'>";
        String html2 =  "</body></html>";
        JTabbedPane tp = new JTabbedPane();
        tp.addTab(html1 + "Groups" + html2, new JLabel(style));
        tp.addTab(html1 + "Settings" + html2, new JLabel(style));
        tp.addTab(html1 + "About" + html2, new JLabel(style));

        gui.add(tp);

        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        f.setContentPane(gui);
        f.setMinimumSize(new Dimension(400,100));
        f.pack();
        f.setLocationByPlatform(true);
        f.setVisible(true);
    }

    public static void main(String[] args) {
        Runnable r = new Runnable() {

            @Override
            public void run() {
                String[] css = {
                    "margin:0;background:#ffffff;",
                    "padding:10px;",
                    "width:110px;height:10px;border-radius:3px;"
                        + "text-align:center;border:none;"
                };
                showStyle(css[0]);
                showStyle(css[0]+css[1]);
                showStyle(css[0]+css[1]+css[2]);
            }
        };
        // Swing GUIs should be created and updated on the EDT
        // http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html
        SwingUtilities.invokeLater(r);
    }
}

See also @whiskeyspider suggestion re @trashgod solution for the BG color . Much ( much ) nicer than trying to force it in the HTML.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM