Lorsque l'on souhaite écrire une feuille de style CSS pour une interface existante Swing ou SWT, partir d'une base d'une feuille de style peut simplifier son écriture. org.akrogen.tkui.css.core.serializers.CSSSerializer est capable de générer la feuille de style CSS d'une interface existante SWT ou Swing, autrement dit elle itère sur chacune des widgets de l'interface et calcule sont style pour générer la feuille de style CSS.
Cette section décrit comment :
La méthode serialize de CSSSerializer permet de générer la feuille de style CSS d'une interface. CSSSerializer utilise une instance CSSEngine et est configurable pour générer les sectors adéquates. Le principe est le suivant :
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; }