When you wish write CSS style sheet for existing SWT, Swing user interface, it's very usefull to start with base of style sheet to simplify the writing of the sheet. CSSSerializer can be help you, because it can generate CSS style sheet from existing SWT, Swing user interface , in other words CSSSerializer loop for each widgets of the user interface, compute the CSS styles and generate the style sheet.
This section describe how
CSSSerializer serialize method is able to generate style sheet of existing user interface. CSSSerializer use CSSEngine instance and it you configure it to manage the selectors as you wish . Here how use CSSSerializer :
CSSEngine engine = .... CSSSerializer serializer = new CSSSerializer(); StringWriter writer = new StringWriter(); serializer.serialize(writer, engine, shell, true); System.out.println(writer.toString());
Display display = new Display(); Shell shell = new Shell(display, SWT.SHELL_TRIM); // Text Text text1 = new Text(shell, SWT.NONE); text1.setText("bla bla bla..."); // TextArea Text textarea = new Text(panel1, SWT.MULTI); textarea.setText("bla bla bla..."); // Label Label label3 = new Label(panel1, SWT.NONE); label3.setText("Label 3"); // Create Button Button button = new Button(panel1, SWT.BORDER); button.setText("SWT Button"); // Create Button [SWT.CHECK] Button checkbox = new Button(panel1, SWT.CHECK); checkbox.setText("SWT Button [SWT.CHECK]"); // Create Button [SWT.RADIO] Button radio = new Button(panel1, SWT.RADIO); radio.setText("SWT Button [SWT.RADIO]"); // Create Combo Combo combo = new Combo(panel1, SWT.BORDER); combo.add("Item 1"); combo.add("Item 2"); combo.select(0);
CSSEngine engine = new CSSSWTEngineImpl(display); CSSSerializer serializer = new CSSSerializer(); StringWriter writer = new StringWriter(); serializer.serialize(writer, engine, shell, true, CSSSWTSerializerConfiguration.INSTANCE); System.out.println(writer.toString());
Button[style='SWT.CHECK'] { cursor:auto; visibility:visible; font-weight:normal; border-width:0; background-image:none; background-color:rgb(240, 240, 240); font-size:9; font-style:normal; color:rgb(0, 0, 0); text-transform:none; font-family:"Segoe UI"; } Text { cursor:auto; visibility:visible; font-weight:normal; border-width:0; background-image:none; background-color:rgb(255, 255, 255); font-size:9; font-style:normal; color:rgb(0, 0, 0); text-transform:none; font-family:"Segoe UI"; } Shell[style='SWT.RADIO'] { cursor:auto; visibility:visible; font-weight:normal; border-width:0; background-image:none; background-color:rgb(240, 240, 240); font-size:9; font-style:normal; color:rgb(0, 0, 0); text-transform:none; font-family:"Segoe UI"; } Button[style='SWT.RADIO'] { cursor:auto; visibility:visible; font-weight:normal; border-width:0; background-image:none; background-color:rgb(240, 240, 240); font-size:9; font-style:normal; color:rgb(0, 0, 0); text-transform:none; font-family:"Segoe UI"; } Text[style='SWT.MULTI'] { cursor:auto; visibility:visible; font-weight:normal; border-width:0; background-image:none; background-color:rgb(255, 255, 255); font-size:9; font-style:normal; color:rgb(0, 0, 0); text-transform:none; font-family:"Segoe UI"; } Button[style='SWT.PUSH'] { cursor:auto; visibility:visible; font-weight:normal; border-width:0; background-image:none; background-color:rgb(240, 240, 240); font-size:9; font-style:normal; color:rgb(0, 0, 0); text-transform:none; font-family:"Segoe UI"; } Label { cursor:auto; visibility:visible; font-weight:normal; border-width:0; background-image:none; background-color:rgb(240, 240, 240); font-size:9; font-style:normal; color:rgb(0, 0, 0); text-transform:none; font-family:"Segoe UI"; } Combo { cursor:auto; visibility:visible; font-weight:normal; border-width:0; background-image:none; background-color:rgb(255, 255, 255); font-size:9; font-style:normal; color:rgb(0, 0, 0); text-transform:none; font-family:"Segoe UI"; } Composite { cursor:auto; visibility:visible; font-weight:normal; border-width:0; background-image:none; background-color:rgb(240, 240, 240); font-size:9; font-style:normal; color:rgb(0, 0, 0); text-transform:none; font-family:"Segoe UI"; }
CSSEngine engine = new CSSSWTHTMLEngineImpl(display); CSSSerializer serializer = new CSSSerializer(); StringWriter writer = new StringWriter(); serializer.serialize(writer, engine, shell, true, CSSHTMLSerializerConfiguration.INSTANCE); System.out.println(writer.toString());
input[type=text] { cursor:auto; visibility:visible; font-weight:normal; border-width:0; background-image:none; background-color:rgb(255, 255, 255); font-size:9; font-style:normal; color:rgb(0, 0, 0); text-transform:none; font-family:"Segoe UI"; } body { cursor:auto; visibility:visible; font-weight:normal; border-width:0; background-image:none; background-color:rgb(240, 240, 240); font-size:9; font-style:normal; color:rgb(0, 0, 0); text-transform:none; font-family:"Segoe UI"; } select { cursor:auto; visibility:visible; font-weight:normal; border-width:0; background-image:none; background-color:rgb(255, 255, 255); font-size:9; font-style:normal; color:rgb(0, 0, 0); text-transform:none; font-family:"Segoe UI"; } textarea { cursor:auto; visibility:visible; font-weight:normal; border-width:0; background-image:none; background-color:rgb(255, 255, 255); font-size:9; font-style:normal; color:rgb(0, 0, 0); text-transform:none; font-family:"Segoe UI"; } input[type=radio] { cursor:auto; visibility:visible; font-weight:normal; border-width:0; background-image:none; background-color:rgb(240, 240, 240); font-size:9; font-style:normal; color:rgb(0, 0, 0); text-transform:none; font-family:"Segoe UI"; } div { cursor:auto; visibility:visible; font-weight:normal; border-width:0; background-image:none; background-color:rgb(240, 240, 240); font-size:9; font-style:normal; color:rgb(0, 0, 0); text-transform:none; font-family:"Segoe UI"; } input[type=checkbox] { cursor:auto; visibility:visible; font-weight:normal; border-width:0; background-image:none; background-color:rgb(240, 240, 240); font-size:9; font-style:normal; color:rgb(0, 0, 0); text-transform:none; font-family:"Segoe UI"; } label { cursor:auto; visibility:visible; font-weight:normal; border-width:0; background-image:none; background-color:rgb(240, 240, 240); font-size:9; font-style:normal; color:rgb(0, 0, 0); text-transform:none; font-family:"Segoe UI"; } input[type=button] { cursor:auto; visibility:visible; font-weight:normal; border-width:0; background-image:none; background-color:rgb(240, 240, 240); font-size:9; font-style:normal; color:rgb(0, 0, 0); text-transform:none; font-family:"Segoe UI"; }
JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel panel = new JPanel(); frame.getContentPane().add(panel); // Text JTextField text1 = new JTextField(); text1.setText("bla bla bla..."); panel.add(text1); // TextArea JTextArea textarea = new JTextArea(); textarea.setText("bla bla bla..."); panel.add(textarea); // Label JLabel label3 = new JLabel(); label3.setText("Label 3"); panel.add(label3); // Button JButton button = new JButton(); button.setText("Swing Button"); panel.add(button); // Checkbox JCheckBox checkbox = new JCheckBox(); panel.add(checkbox); // Radio JRadioButton radio = new JRadioButton(); panel.add(radio); // Create Swing JComboBox JComboBox combo = new JComboBox(); combo.addItem("Item 1"); combo.addItem("Item 2"); panel.add(combo);
CSSEngine engine = new CSSSwingEngineImpl(); CSSSerializer serializer = new CSSSerializer(); StringWriter writer = new StringWriter(); serializer.serialize(writer, engine, frame, true, CSSSwingSerializerConfiguration.INSTANCE); System.out.println(writer.toString());
JTextField { cursor:text; visibility:visible; font-weight:normal; border-width:1; background-image:none; background-color:rgb(255, 255, 255); font-size:12; font-style:normal; border-color:gray; color:rgb(51, 51, 51); text-transform:none; font-family:Dialog; } JLabel { cursor:default; visibility:visible; font-weight:bold; border-width:0; background-image:none; background-color:rgb(238, 238, 238); font-size:12; font-style:normal; color:rgb(51, 51, 51); text-transform:none; font-family:Dialog; } JComboBox { cursor:default; visibility:visible; font-weight:bold; border-width:0; background-image:none; background-color:rgb(238, 238, 238); font-size:12; font-style:normal; color:rgb(51, 51, 51); text-transform:none; font-family:Dialog; } JPanel { cursor:default; visibility:visible; font-weight:normal; border-width:0; background-image:none; background-color:rgb(238, 238, 238); font-size:12; font-style:normal; color:rgb(51, 51, 51); text-transform:none; font-family:Dialog; } JRootPane { cursor:default; visibility:visible; border-width:0; background-image:none; background-color:rgb(238, 238, 238); text-transform:none; } JLayeredPane { cursor:default; visibility:visible; border-width:0; background-image:none; background-color:rgb(238, 238, 238); text-transform:none; } JRadioButton { cursor:default; visibility:visible; font-weight:bold; border-width:1; background-image:none; background-color:rgb(238, 238, 238); font-size:12; font-style:normal; border-color:gray; color:rgb(51, 51, 51); text-transform:none; font-family:Dialog; } CellRendererPane { cursor:default; visibility:visible; font-weight:bold; border-width:0; background-image:none; background-color:rgb(238, 238, 238); font-size:12; font-style:normal; color:rgb(51, 51, 51); text-transform:none; font-family:Dialog; } MetalComboBoxButton { cursor:default; visibility:visible; font-weight:bold; border-width:1; background-image:none; background-color:rgb(238, 238, 238); font-size:12; font-style:normal; border-color:gray; color:rgb(51, 51, 51); text-transform:none; font-family:Dialog; } JCheckBox { cursor:default; visibility:visible; font-weight:bold; border-width:1; background-image:none; background-color:rgb(238, 238, 238); font-size:12; font-style:normal; border-color:gray; color:rgb(51, 51, 51); text-transform:none; font-family:Dialog; } JFrame { cursor:default; visibility:visible; border-width:0; background-image:none; background-color:rgb(238, 238, 238); text-transform:none; } JButton { cursor:default; visibility:visible; font-weight:bold; border-width:1; background-image:none; background-color:rgb(238, 238, 238); font-size:12; font-style:normal; border-color:gray; color:rgb(51, 51, 51); text-transform:none; font-family:Dialog; } JTextArea { cursor:text; visibility:visible; font-weight:normal; border-width:1; background-image:none; background-color:rgb(255, 255, 255); font-size:12; font-style:normal; border-color:gray; color:rgb(51, 51, 51); text-transform:none; font-family:Dialog; }
CSSEngine engine = new CSSSwingHTMLEngineImpl(); CSSSerializer serializer = new CSSSerializer(); StringWriter writer = new StringWriter(); serializer.serialize(writer, engine, shell, true, CSSHTMLSerializerConfiguration.INSTANCE); System.out.println(writer.toString());
input[type=text] { cursor:text; visibility:visible; font-weight:normal; border-width:1; background-image:none; background-color:rgb(255, 255, 255); font-size:12; font-style:normal; border-color:gray; color:rgb(51, 51, 51); text-transform:none; font-family:Dialog; } body { cursor:default; visibility:visible; border-width:0; background-image:none; background-color:rgb(238, 238, 238); text-transform:none; } select { cursor:default; visibility:visible; font-weight:bold; border-width:0; background-image:none; background-color:rgb(238, 238, 238); font-size:12; font-style:normal; color:rgb(51, 51, 51); text-transform:none; font-family:Dialog; } textarea { cursor:text; visibility:visible; font-weight:normal; border-width:1; background-image:none; background-color:rgb(255, 255, 255); font-size:12; font-style:normal; border-color:gray; color:rgb(51, 51, 51); text-transform:none; font-family:Dialog; } input[type=radio] { cursor:default; visibility:visible; font-weight:bold; border-width:1; background-image:none; background-color:rgb(238, 238, 238); font-size:12; font-style:normal; border-color:gray; color:rgb(51, 51, 51); text-transform:none; font-family:Dialog; } div { cursor:default; visibility:visible; font-weight:normal; border-width:0; background-image:none; background-color:rgb(238, 238, 238); font-size:12; font-style:normal; color:rgb(51, 51, 51); text-transform:none; font-family:Dialog; } input[type=checkbox] { cursor:default; visibility:visible; font-weight:bold; border-width:1; background-image:none; background-color:rgb(238, 238, 238); font-size:12; font-style:normal; border-color:gray; color:rgb(51, 51, 51); text-transform:none; font-family:Dialog; } label { cursor:default; visibility:visible; font-weight:bold; border-width:0; background-image:none; background-color:rgb(238, 238, 238); font-size:12; font-style:normal; color:rgb(51, 51, 51); text-transform:none; font-family:Dialog; } input[type=button] { cursor:default; visibility:visible; font-weight:bold; border-width:1; background-image:none; background-color:rgb(238, 238, 238); font-size:12; font-style:normal; border-color:gray; color:rgb(51, 51, 51); text-transform:none; font-family:Dialog; } CellRendererPane { cursor:default; visibility:visible; font-weight:bold; border-width:0; background-image:none; background-color:rgb(238, 238, 238); font-size:12; font-style:normal; color:rgb(51, 51, 51); text-transform:none; font-family:Dialog; }