• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

jiangxincode / ApkToolBoxGUI / #631

02 Mar 2024 04:18PM UTC coverage: 3.216% (-0.02%) from 3.232%
#631

push

jiangxincode
fix codefactor issues

0 of 180 new or added lines in 11 files covered. (0.0%)

3 existing lines in 2 files now uncovered.

240 of 7463 relevant lines covered (3.22%)

0.03 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/src/main/java/edu/jiangxin/apktoolbox/convert/color/ColorConvertPanel.java
1
package edu.jiangxin.apktoolbox.convert.color;
2

3
import edu.jiangxin.apktoolbox.convert.color.colortable.IColorTable;
4
import edu.jiangxin.apktoolbox.convert.color.colortable.OrdinaryColorTable;
5
import edu.jiangxin.apktoolbox.convert.color.colortable.RalColorTable;
6
import edu.jiangxin.apktoolbox.swing.extend.EasyPanel;
7
import edu.jiangxin.apktoolbox.utils.Constants;
8

9
import javax.swing.*;
10
import javax.swing.event.ChangeEvent;
11
import javax.swing.event.ChangeListener;
12
import javax.swing.event.DocumentEvent;
13
import javax.swing.event.DocumentListener;
14
import javax.swing.table.DefaultTableCellRenderer;
15
import javax.swing.table.DefaultTableModel;
16
import java.awt.*;
17

18
public class ColorConvertPanel extends EasyPanel {
19
    private Color color;
20

21
    private JSpinner redSpinner;
22

23
    private JSpinner greenInRgbSpinner;
24

25
    private JSpinner blueInRgbSpinner;
26

27
    private JTextField hexInRgbTextField;
28

29
    private JSpinner hueInHsbSpinner;
30

31
    private JSpinner saturationInHsbSpinner;
32

33
    private JSpinner brightnessInHsbSpinner;
34

35
    private JSpinner hueInHslSpinner;
36

37
    private JSpinner saturationInHslSpinner;
38

39
    private JSpinner lightnessInHslSpinner;
40

41
    private JSpinner cyanInCmykSpinner;
42

43
    private JSpinner magentaInCmykSpinner;
44

45
    private JSpinner yellowInCmykSpinner;
46

47
    private JSpinner blackInCmykSpinner;
48

49
    private JSpinner lInCielabSpinner;
50

51
    private JSpinner aInCielabSpinner;
52

53
    private JSpinner bInCielabSpinner;
54

55
    private JTextField colorBoxTextField;
56

57
    private JComboBox<IColorTable> colorTableTypeComboBox;
58

59
    private JTable colorTable;
60

61
    private boolean isChangedByUser = true;
×
62

63
    public ColorConvertPanel() throws HeadlessException {
64
        super();
×
65
    }
×
66

67
    @Override
68
    public void initUI() {
69
        add(Box.createVerticalStrut(Constants.DEFAULT_Y_BORDER));
×
70
        createColorBoxPanel();
×
71

72
        BoxLayout boxLayout = new BoxLayout(this, BoxLayout.Y_AXIS);
×
73
        setLayout(boxLayout);
×
74

75
        add(Box.createVerticalStrut(Constants.DEFAULT_Y_BORDER));
×
76
        createRgbPanel();
×
77

78
        add(Box.createVerticalStrut(Constants.DEFAULT_Y_BORDER));
×
79
        createHsbPanel();
×
80

81
        add(Box.createVerticalStrut(Constants.DEFAULT_Y_BORDER));
×
82
        createHslPanel();
×
83

84
        add(Box.createVerticalStrut(Constants.DEFAULT_Y_BORDER));
×
85
        createCmykPanel();
×
86

87
        add(Box.createVerticalStrut(Constants.DEFAULT_Y_BORDER));
×
88
        createCielabPanel();
×
89

90
        add(Box.createVerticalStrut(Constants.DEFAULT_Y_BORDER));
×
91
        createColorTablePanel();
×
92
    }
×
93

94
    public void createColorBoxPanel() {
95
        JPanel colorBoxPanel = new JPanel();
×
96
        add(colorBoxPanel);
×
97
        colorBoxPanel.setLayout(new BorderLayout());
×
98
        colorBoxPanel.setBorder(BorderFactory.createTitledBorder("Color Box"));
×
99

100
        JPanel xPanel = new JPanel();
×
101
        colorBoxPanel.add(xPanel);
×
102
        xPanel.setLayout(new BoxLayout(xPanel, BoxLayout.X_AXIS));
×
103

104
        colorBoxTextField = new JTextField();
×
105
        colorBoxTextField.setEditable(false);
×
106
        colorBoxTextField.setOpaque(false);
×
107

108
        xPanel.add(colorBoxTextField);
×
109
    }
×
110

111
    private void createRgbPanel() {
112
        JPanel rgbPanel = new JPanel();
×
113
        add(rgbPanel);
×
114
        rgbPanel.setLayout(new BorderLayout());
×
115
        rgbPanel.setBorder(BorderFactory.createTitledBorder("RGB"));
×
116

117
        JPanel xPanel = new JPanel();
×
118
        rgbPanel.add(xPanel);
×
119
        xPanel.setLayout(new BoxLayout(xPanel, BoxLayout.X_AXIS));
×
120

121
        JLabel rebLabel = new JLabel("R(Red, [0-255])");
×
122
        redSpinner = new JSpinner();
×
123
        redSpinner.setModel(new SpinnerNumberModel(0, 0, 255, 1));
×
124
        redSpinner.addChangeListener(new RgbChangeListener());
×
125

126
        JLabel greenLabel = new JLabel("G(Green, [0-255])");
×
127
        greenInRgbSpinner = new JSpinner();
×
128
        greenInRgbSpinner.setModel(new SpinnerNumberModel(0, 0, 255, 1));
×
129
        greenInRgbSpinner.addChangeListener(new RgbChangeListener());
×
130

131
        JLabel blueLabel = new JLabel("B(Blue, [0-255])");
×
132
        blueInRgbSpinner = new JSpinner();
×
133
        blueInRgbSpinner.setModel(new SpinnerNumberModel(0, 0, 255, 1));
×
134
        blueInRgbSpinner.addChangeListener(new RgbChangeListener());
×
135

136
        JLabel hexLabel = new JLabel("Hex");
×
137
        hexInRgbTextField = new JTextField();
×
138
        hexInRgbTextField.setToolTipText("0xFFFFFF格式常用在通用语言中(Java/C++等), #FFFFFF格式常用在标记语言中(XML/HTML等)");
×
139
        hexInRgbTextField.setEditable(true);
×
140
        hexInRgbTextField.getDocument().addDocumentListener(new HexDocumentListener());
×
141

142
        xPanel.add(rebLabel);
×
143
        xPanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER));
×
144
        xPanel.add(redSpinner);
×
145
        xPanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER));
×
146
        xPanel.add(greenLabel);
×
147
        xPanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER));
×
148
        xPanel.add(greenInRgbSpinner);
×
149
        xPanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER));
×
150
        xPanel.add(blueLabel);
×
151
        xPanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER));
×
152
        xPanel.add(blueInRgbSpinner);
×
153
        xPanel.add(Box.createHorizontalBox().createHorizontalStrut(3 * Constants.DEFAULT_X_BORDER));
×
154
        xPanel.add(hexLabel);
×
155
        xPanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER));
×
156
        xPanel.add(hexInRgbTextField);
×
157
    }
×
158

159
    private void createHsbPanel() {
160
        JPanel hsbPanel = new JPanel();
×
161
        add(hsbPanel);
×
162
        hsbPanel.setLayout(new BorderLayout());
×
163
        hsbPanel.setBorder(BorderFactory.createTitledBorder("HSB/HSV"));
×
164

165
        JPanel xPanel = new JPanel();
×
166
        hsbPanel.add(xPanel);
×
167
        xPanel.setLayout(new BoxLayout(xPanel, BoxLayout.X_AXIS));
×
168

169
        JLabel hueLabel = new JLabel("H(Hue, [0-360])");
×
170
        hueInHsbSpinner = new JSpinner();
×
171
        hueInHsbSpinner.setModel(new SpinnerNumberModel(0, 0, 360, 1));
×
172
        hueInHsbSpinner.addChangeListener(new HsbChangeListener());
×
173

174
        JLabel saturationLabel = new JLabel("S(Saturation, [0-100])");
×
175
        saturationInHsbSpinner = new JSpinner();
×
176
        saturationInHsbSpinner.setModel(new SpinnerNumberModel(100, 0, 100, 1));
×
177
        saturationInHsbSpinner.addChangeListener(new HsbChangeListener());
×
178

179

180
        JLabel brightnessLabel = new JLabel("B/V(Brightness/Value, [0-100])");
×
181
        brightnessInHsbSpinner = new JSpinner();
×
182
        brightnessInHsbSpinner.setModel(new SpinnerNumberModel(100, 0, 100, 1));
×
183
        brightnessInHsbSpinner.addChangeListener(new HsbChangeListener());
×
184

185
        xPanel.add(hueLabel);
×
186
        xPanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER));
×
187
        xPanel.add(hueInHsbSpinner);
×
188
        xPanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER));
×
189
        xPanel.add(saturationLabel);
×
190
        xPanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER));
×
191
        xPanel.add(saturationInHsbSpinner);
×
192
        xPanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER));
×
193
        xPanel.add(brightnessLabel);
×
194
        xPanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER));
×
195
        xPanel.add(brightnessInHsbSpinner);
×
196
    }
×
197

198
    private void createHslPanel() {
199
        JPanel hslPanel = new JPanel();
×
200
        add(hslPanel);
×
201
        hslPanel.setLayout(new BorderLayout());
×
202
        hslPanel.setBorder(BorderFactory.createTitledBorder("HSL"));
×
203

204
        JPanel xPanel = new JPanel();
×
205
        hslPanel.add(xPanel);
×
206
        xPanel.setLayout(new BoxLayout(xPanel, BoxLayout.X_AXIS));
×
207

208
        JLabel hueLabel = new JLabel("H(Hue, [0-360])");
×
209
        hueInHslSpinner = new JSpinner();
×
210
        hueInHslSpinner.setModel(new SpinnerNumberModel(0, 0, 360, 1));
×
211
        hueInHslSpinner.addChangeListener(new HslChangeListener());
×
212

213
        JLabel saturationLabel = new JLabel("S(Saturation, [0-100])");
×
214
        saturationInHslSpinner = new JSpinner();
×
215
        saturationInHslSpinner.setModel(new SpinnerNumberModel(100, 0, 100, 1));
×
216
        saturationInHslSpinner.addChangeListener(new HslChangeListener());
×
217

218

219
        JLabel lightnessLabel = new JLabel("L(Lightness, [0-100])");
×
220
        lightnessInHslSpinner = new JSpinner();
×
221
        lightnessInHslSpinner.setModel(new SpinnerNumberModel(50, 0, 100, 1));
×
222
        lightnessInHslSpinner.addChangeListener(new HslChangeListener());
×
223

224
        xPanel.add(hueLabel);
×
225
        xPanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER));
×
226
        xPanel.add(hueInHslSpinner);
×
227
        xPanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER));
×
228
        xPanel.add(saturationLabel);
×
229
        xPanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER));
×
230
        xPanel.add(saturationInHslSpinner);
×
231
        xPanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER));
×
232
        xPanel.add(lightnessLabel);
×
233
        xPanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER));
×
234
        xPanel.add(lightnessInHslSpinner);
×
235
    }
×
236

237
    private void createCmykPanel() {
238
        JPanel cmykPanel = new JPanel();
×
239
        add(cmykPanel);
×
240
        cmykPanel.setLayout(new BorderLayout());
×
241
        cmykPanel.setBorder(BorderFactory.createTitledBorder("CMYK"));
×
242

243
        JPanel xPanel = new JPanel();
×
244
        cmykPanel.add(xPanel);
×
245
        xPanel.setLayout(new BoxLayout(xPanel, BoxLayout.X_AXIS));
×
246

247
        JLabel cyanLabel = new JLabel("C(Cyan, [0-100])");
×
248
        cyanInCmykSpinner = new JSpinner();
×
249
        cyanInCmykSpinner.setModel(new SpinnerNumberModel(100, 0, 100, 1));
×
250
        cyanInCmykSpinner.addChangeListener(new CmykChangeListener());
×
251

252
        JLabel magentaLabel = new JLabel("M(Magenta, [0-100])");
×
253
        magentaInCmykSpinner = new JSpinner();
×
254
        magentaInCmykSpinner.setModel(new SpinnerNumberModel(100, 0, 100, 1));
×
255
        magentaInCmykSpinner.addChangeListener(new CmykChangeListener());
×
256

257

258
        JLabel yellowLabel = new JLabel("Y(Yellow, [0-100])");
×
259
        yellowInCmykSpinner = new JSpinner();
×
260
        yellowInCmykSpinner.setModel(new SpinnerNumberModel(100, 0, 100, 1));
×
261
        yellowInCmykSpinner.addChangeListener(new CmykChangeListener());
×
262

263
        JLabel blackLabel = new JLabel("K(Black, [0-100])");
×
264
        blackInCmykSpinner = new JSpinner();
×
265
        blackInCmykSpinner.setModel(new SpinnerNumberModel(0, 0, 100, 1));
×
266
        blackInCmykSpinner.addChangeListener(new CmykChangeListener());
×
267

268
        xPanel.add(cyanLabel);
×
269
        xPanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER));
×
270
        xPanel.add(cyanInCmykSpinner);
×
271
        xPanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER));
×
272
        xPanel.add(magentaLabel);
×
273
        xPanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER));
×
274
        xPanel.add(magentaInCmykSpinner);
×
275
        xPanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER));
×
276
        xPanel.add(yellowLabel);
×
277
        xPanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER));
×
278
        xPanel.add(yellowInCmykSpinner);
×
279
        xPanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER));
×
280
        xPanel.add(blackLabel);
×
281
        xPanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER));
×
282
        xPanel.add(blackInCmykSpinner);
×
283
    }
×
284

285
    private void createCielabPanel() {
286
        JPanel cielabPanel = new JPanel();
×
287
        add(cielabPanel);
×
288
        cielabPanel.setLayout(new BorderLayout());
×
289
        cielabPanel.setBorder(BorderFactory.createTitledBorder("CIELAB"));
×
290

291
        JPanel xPanel = new JPanel();
×
292
        cielabPanel.add(xPanel);
×
293
        xPanel.setLayout(new BoxLayout(xPanel, BoxLayout.X_AXIS));
×
294

295
        JLabel lLabel = new JLabel("L([0-100])");
×
296
        lInCielabSpinner = new JSpinner();
×
297
        lInCielabSpinner.setModel(new SpinnerNumberModel(50, 0, 100, 1));
×
298
        lInCielabSpinner.addChangeListener(new CielabChangeListener());
×
299

300
        JLabel magentaLabel = new JLabel("A([-128-127])");
×
301
        aInCielabSpinner = new JSpinner();
×
302
        aInCielabSpinner.setModel(new SpinnerNumberModel(0, -128, 127, 1));
×
303
        aInCielabSpinner.addChangeListener(new CielabChangeListener());
×
304

305

306
        JLabel yellowLabel = new JLabel("B([-128-127])");
×
307
        bInCielabSpinner = new JSpinner();
×
308
        bInCielabSpinner.setModel(new SpinnerNumberModel(0, -128, 127, 1));
×
309
        bInCielabSpinner.addChangeListener(new CielabChangeListener());
×
310

311
        xPanel.add(lLabel);
×
312
        xPanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER));
×
313
        xPanel.add(lInCielabSpinner);
×
314
        xPanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER));
×
315
        xPanel.add(magentaLabel);
×
316
        xPanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER));
×
317
        xPanel.add(aInCielabSpinner);
×
318
        xPanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER));
×
319
        xPanel.add(yellowLabel);
×
320
        xPanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER));
×
321
        xPanel.add(bInCielabSpinner);
×
322
    }
×
323

324
    private void createColorTablePanel() {
325
        JPanel colorTablePanel = new JPanel();
×
326
        add(colorTablePanel);
×
327
        colorTablePanel.setLayout(new BorderLayout());
×
328
        colorTablePanel.setBorder(BorderFactory.createTitledBorder("Color Table"));
×
329

330
        JPanel yPanel = new JPanel();
×
331
        colorTablePanel.add(yPanel);
×
332
        yPanel.setLayout(new BoxLayout(yPanel, BoxLayout.Y_AXIS));
×
333

334
        colorTableTypeComboBox = new JComboBox<>();
×
335
        IColorTable ordinaryColorTable = new OrdinaryColorTable();
×
336
        IColorTable ralColorTable = new RalColorTable();
×
337
        colorTableTypeComboBox.addItem(ordinaryColorTable);
×
338
        colorTableTypeComboBox.addItem(ralColorTable);
×
339
        colorTableTypeComboBox.setSelectedItem(ordinaryColorTable);
×
340
        colorTableTypeComboBox.addItemListener(itemEvent -> {
×
341
            ColorDefaultTableModel model = (ColorDefaultTableModel) colorTable.getModel();
×
342
            IColorTable selectedColorTable = (IColorTable) itemEvent.getItem();
×
343
            model.setDataVector(selectedColorTable.getTableRowData(), selectedColorTable.getColumnNames());
×
344
            onColorTableChanged();
×
345
        });
×
346

347
        IColorTable selectedColorTable = (IColorTable) colorTableTypeComboBox.getSelectedItem();
×
348
        colorTable = new JTable(new ColorDefaultTableModel(selectedColorTable.getTableRowData(), selectedColorTable.getColumnNames()));
×
349
        JScrollPane colorTableScrollPane = new JScrollPane(colorTable);
×
350
        onColorTableChanged();
×
351

352
        yPanel.add(colorTableTypeComboBox);
×
353
        yPanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER));
×
354
        yPanel.add(colorTableScrollPane);
×
355
    }
×
356

357
    private void onColorTableChanged() {
358
        IColorTable selectedColorTable = (IColorTable) colorTableTypeComboBox.getSelectedItem();
×
359
        int labelIndex = selectedColorTable.getLabelIndex();
×
360
        String labelName = colorTable.getColumnName(labelIndex);
×
361
        colorTable.getColumn(labelName).setCellRenderer(new ColorTableCellRenderer());
×
362
    }
×
363

364
    private class ColorDefaultTableModel extends DefaultTableModel {
365
        public ColorDefaultTableModel(Object[][] data, Object[] columnNames) {
×
366
            super(data, columnNames);
×
367
        }
×
368

369
        @Override
370
        public boolean isCellEditable(int row, int column) {
371
            return true;
×
372
        }
373
    }
374

375
    private class ColorTableCellRenderer extends DefaultTableCellRenderer {
×
376
        @Override
377
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
378
            Component renderer = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
×
379
            IColorTable selectedColorTable = (IColorTable) colorTableTypeComboBox.getSelectedItem();
×
380
            if (selectedColorTable == null) {
×
381
                return renderer;
×
382
            }
383
            String hex = (String) colorTable.getValueAt(row, selectedColorTable.getHexIndex());
×
384
            Color color = ColorUtils.hex2Color(hex);
×
385
            renderer.setBackground(color);
×
386
            return renderer;
×
387
        }
388
    }
389

390
    private void syncToOthersFormat(String colorMode) {
391
        if (!colorMode.equalsIgnoreCase("RGB")) {
×
392
            redSpinner.setValue(color.getRed());
×
393
            greenInRgbSpinner.setValue(color.getGreen());
×
394
            blueInRgbSpinner.setValue(color.getBlue());
×
395
        }
396
        if (!colorMode.equalsIgnoreCase("HEX")) {
×
397
            hexInRgbTextField.setText(ColorUtils.color2Hex(color));
×
398
        }
399
        if (!colorMode.equalsIgnoreCase("HSB")) {
×
400
            int[] hsbArray = ColorUtils.color2Hsb(color);
×
401
            hueInHsbSpinner.setValue(hsbArray[0]);
×
402
            saturationInHsbSpinner.setValue(hsbArray[1]);
×
403
            brightnessInHsbSpinner.setValue(hsbArray[2]);
×
404
        }
405
        if (!colorMode.equalsIgnoreCase("HSL")) {
×
406
            int[] hsbArray = ColorUtils.color2Hsl(color);
×
407
            hueInHslSpinner.setValue(hsbArray[0]);
×
408
            saturationInHslSpinner.setValue(hsbArray[1]);
×
409
            lightnessInHslSpinner.setValue(hsbArray[2]);
×
410
        }
411
        if (!colorMode.equalsIgnoreCase("CMYK")) {
×
412
            int[] cmykArray = ColorUtils.color2Cmyk(color);
×
413
            cyanInCmykSpinner.setValue(cmykArray[0]);
×
414
            magentaInCmykSpinner.setValue(cmykArray[1]);
×
415
            yellowInCmykSpinner.setValue(cmykArray[2]);
×
416
            blackInCmykSpinner.setValue(cmykArray[3]);
×
417
        }
418
        if (!colorMode.equalsIgnoreCase("CIELAB")) {
×
419
            int[] cielabArray = ColorUtils.color2Cielab(color);
×
420
            lInCielabSpinner.setValue(cielabArray[0]);
×
421
            aInCielabSpinner.setValue(cielabArray[1]);
×
422
            bInCielabSpinner.setValue(cielabArray[2]);
×
423
        }
424
        colorBoxTextField.setBackground(color);
×
425
        //paint the color box with the converted output color
426
        colorBoxTextField.setOpaque(true);
×
427
    }
×
428

429
    class RgbChangeListener implements ChangeListener {
×
430
        @Override
431
        public void stateChanged(ChangeEvent e) {
432
            if (!isChangedByUser) {
×
433
                return;
×
434
            }
435
            isChangedByUser = false;
×
436
            int red = (Integer) redSpinner.getValue();
×
437
            int green = (Integer) greenInRgbSpinner.getValue();
×
438
            int blue = (Integer) blueInRgbSpinner.getValue();
×
439
            color = new Color(red, green, blue);
×
440
            syncToOthersFormat("RGB");
×
441
            isChangedByUser = true;
×
442
        }
×
443
    }
444

445
    class HsbChangeListener implements ChangeListener {
×
446
        @Override
447
        public void stateChanged(ChangeEvent e) {
448
            if (!isChangedByUser) {
×
449
                return;
×
450
            }
451
            isChangedByUser = false;
×
452
            int hue = (Integer) hueInHsbSpinner.getValue();
×
453
            int saturation = (Integer) saturationInHsbSpinner.getValue();
×
454
            int brightness = (Integer) brightnessInHsbSpinner.getValue();
×
455
            color = ColorUtils.hsb2Color(hue, saturation, brightness);
×
456
            syncToOthersFormat("HSB");
×
457
            isChangedByUser = true;
×
458
        }
×
459
    }
460

461
    class HslChangeListener implements ChangeListener {
×
462
        @Override
463
        public void stateChanged(ChangeEvent e) {
464
            if (!isChangedByUser) {
×
465
                return;
×
466
            }
467
            isChangedByUser = false;
×
468
            int hue = (Integer) hueInHslSpinner.getValue();
×
469
            int saturation = (Integer) saturationInHslSpinner.getValue();
×
470
            int lightness = (Integer) lightnessInHslSpinner.getValue();
×
471
            color = ColorUtils.hsl2Color(hue, saturation, lightness);
×
472
            syncToOthersFormat("HSL");
×
473
            isChangedByUser = true;
×
474
        }
×
475
    }
476

477
    class CmykChangeListener implements ChangeListener {
×
478
        @Override
479
        public void stateChanged(ChangeEvent e) {
480
            if (!isChangedByUser) {
×
481
                return;
×
482
            }
483
            isChangedByUser = false;
×
484
            int cyan = (Integer) cyanInCmykSpinner.getValue();
×
485
            int magenta = (Integer) magentaInCmykSpinner.getValue();
×
486
            int yellow = (Integer) yellowInCmykSpinner.getValue();
×
487
            int black = (Integer) blackInCmykSpinner.getValue();
×
488
            color = ColorUtils.cmyk2Color(cyan, magenta, yellow, black);
×
489
            syncToOthersFormat("CMYK");
×
490
            isChangedByUser = true;
×
491
        }
×
492
    }
493

494
    class CielabChangeListener implements ChangeListener {
×
495
        @Override
496
        public void stateChanged(ChangeEvent e) {
497
            if (!isChangedByUser) {
×
498
                return;
×
499
            }
500
            isChangedByUser = false;
×
501
            int l = (Integer) lInCielabSpinner.getValue();
×
502
            int a = (Integer) aInCielabSpinner.getValue();
×
503
            int b = (Integer) bInCielabSpinner.getValue();
×
504
            color = ColorUtils.cielab2Color(l, a, b);
×
505
            syncToOthersFormat("CIELAB");
×
506
            isChangedByUser = true;
×
507
        }
×
508
    }
509

510
    class HexDocumentListener implements DocumentListener {
×
511
        @Override
512
        public void insertUpdate(DocumentEvent e) {
513
            onValueUpdate();
×
514
        }
×
515

516
        @Override
517
        public void removeUpdate(DocumentEvent e) {
518
            onValueUpdate();
×
519
        }
×
520

521
        @Override
522
        public void changedUpdate(DocumentEvent e) {
523
            onValueUpdate();
×
524
        }
×
525

526
        private void onValueUpdate() {
527
            if (!isChangedByUser) {
×
528
                return;
×
529
            }
530
            isChangedByUser = false;
×
531
            String hex = hexInRgbTextField.getText();
×
532
            try {
533
                color = ColorUtils.hex2Color(hex);
×
534
                syncToOthersFormat("HEX");
×
535
            } catch (NumberFormatException e) {
×
NEW
536
                logger.error("Invalid hex value: {}", hex);
×
537
            }
×
538
            isChangedByUser = true;
×
539
        }
×
540
    }
541
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc