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

jiangxincode / ApkToolBoxGUI / #1398

15 Mar 2026 11:04AM UTC coverage: 4.113% (+0.3%) from 3.843%
#1398

push

jiangxincode
Merge branch 'master' of https://github.com/jiangxincode/ApkToolBoxGUI

341 of 8291 relevant lines covered (4.11%)

0.04 hits per line

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

0.0
/src/main/java/edu/jiangxin/apktoolbox/main/MainFrame.java
1
package edu.jiangxin.apktoolbox.main;
2

3
import edu.jiangxin.apktoolbox.Version;
4
import edu.jiangxin.apktoolbox.android.dumpsys.DumpsysPanel;
5
import edu.jiangxin.apktoolbox.convert.color.ColorConvertPanel;
6
import edu.jiangxin.apktoolbox.convert.color.ColorPickerPanel;
7
import edu.jiangxin.apktoolbox.convert.color.ColorTablePanel;
8
import edu.jiangxin.apktoolbox.convert.encoding.AsciiGbViewerPanel;
9
import edu.jiangxin.apktoolbox.convert.encoding.GarbledTextRecoveryPanel;
10
import edu.jiangxin.apktoolbox.convert.protobuf.supervised.SupervisedProtobufConvertPanel;
11
import edu.jiangxin.apktoolbox.convert.protobuf.unsupervised.UnsupervisedProtobufConvertPanel;
12
import edu.jiangxin.apktoolbox.file.batchrename.BatchRenamePanel;
13
import edu.jiangxin.apktoolbox.file.EncodeConvertPanel;
14
import edu.jiangxin.apktoolbox.file.OsConvertPanel;
15
import edu.jiangxin.apktoolbox.file.checksum.ChecksumPanel;
16
import edu.jiangxin.apktoolbox.file.password.recovery.RecoveryPanel;
17
import edu.jiangxin.apktoolbox.file.duplicate.DuplicateSearchPanel;
18
import edu.jiangxin.apktoolbox.file.zhconvert.ZhConvertPanel;
19
import edu.jiangxin.apktoolbox.help.*;
20
import edu.jiangxin.apktoolbox.android.i18n.I18nAddPanel;
21
import edu.jiangxin.apktoolbox.android.i18n.I18nFindLongestPanel;
22
import edu.jiangxin.apktoolbox.android.i18n.I18nRemovePanel;
23
import edu.jiangxin.apktoolbox.android.monkey.MonkeyPanel;
24
import edu.jiangxin.apktoolbox.help.settings.SettingsPanel;
25
import edu.jiangxin.apktoolbox.pdf.finder.PdfFinderPanel;
26
import edu.jiangxin.apktoolbox.pdf.passwordremover.PdfPasswordRemoverPanel;
27
import edu.jiangxin.apktoolbox.pdf.pic2pdf.Pic2PdfPanel;
28
import edu.jiangxin.apktoolbox.pdf.stat.PdfStatPanel;
29
import edu.jiangxin.apktoolbox.reverse.*;
30
import edu.jiangxin.apktoolbox.android.screenshot.ScreenShotPanel;
31
import edu.jiangxin.apktoolbox.reverse.ApktoolPanel;
32
import edu.jiangxin.apktoolbox.swing.extend.EasyFrame;
33
import edu.jiangxin.apktoolbox.swing.extend.EasyPanel;
34
import edu.jiangxin.apktoolbox.swing.extend.listener.ChangeMenuListener;
35
import edu.jiangxin.apktoolbox.swing.extend.listener.ChangeMenuToUrlListener;
36
import edu.jiangxin.apktoolbox.swing.extend.listener.IPreChangeMenuCallBack;
37
import edu.jiangxin.apktoolbox.swing.extend.plugin.ChangeMenuPreparePluginController;
38
import edu.jiangxin.apktoolbox.swing.extend.plugin.PluginPanel;
39
import edu.jiangxin.apktoolbox.swing.keeper.UiStateKeeper;
40
import edu.jiangxin.apktoolbox.utils.Utils;
41
import org.apache.commons.configuration2.Configuration;
42
import org.apache.commons.lang3.StringUtils;
43
import org.apache.logging.log4j.LogManager;
44
import org.apache.logging.log4j.Logger;
45

46
import javax.swing.*;
47
import javax.swing.border.EmptyBorder;
48
import java.awt.*;
49
import java.awt.event.*;
50
import java.io.Serial;
51
import java.lang.reflect.InvocationTargetException;
52
import java.text.MessageFormat;
53
import java.util.Locale;
54
import java.util.Objects;
55

56
/**
57
 * @author jiangxin
58
 * @author 2018-08-19
59
 */
60
public final class MainFrame extends EasyFrame {
61

62
    @Serial
63
    private static final long serialVersionUID = 1L;
64

65
    private JPanel contentPane;
66
    private EasyPanel currentEasyPanel = null;
×
67
    private JMenuBar menuBar;
68

69
    public static void main(String[] args) {
70
        final Logger logger = LogManager.getLogger(MainFrame.class.getSimpleName());
×
71
        boolean isEnvironmentOk = Utils.checkAndInitEnvironment();
×
72
        if (!isEnvironmentOk) {
×
73
            logger.error("Environment is not ready, exit");
×
74
            return;
×
75
        }
76
        EventQueue.invokeLater(() -> {
×
77
            Configuration conf = Utils.getConfiguration();
×
78
            String lookAndFeelClassName = conf.getString("look.and.feel.class.name");
×
79
            if (StringUtils.isEmpty(lookAndFeelClassName)) {
×
80
                lookAndFeelClassName = "com.formdev.flatlaf.FlatDarculaLaf";
×
81
                conf.setProperty("look.and.feel.class.name", lookAndFeelClassName);
×
82
            }
83
            try {
84
                UIManager.setLookAndFeel(lookAndFeelClassName);
×
85
            } catch (UnsupportedLookAndFeelException | ClassNotFoundException | InstantiationException | IllegalAccessException e) {
×
86
                logger.error("setLookAndFeel failed, use default instead", e);
×
87
            }
×
88

89
            String currentLocaleLanguage = conf.getString("locale.language");
×
90
            if (StringUtils.isEmpty(currentLocaleLanguage)) {
×
91
                currentLocaleLanguage = Locale.ENGLISH.getLanguage();
×
92
                conf.setProperty("locale.language", currentLocaleLanguage);
×
93
            }
94
            Locale.setDefault(Locale.forLanguageTag(currentLocaleLanguage));
×
95

96
            MainFrame frame = new MainFrame();
×
97

98
            boolean isAlwaysOnTop = conf.getBoolean("always.on.top", false);
×
99
            conf.setProperty("always.on.top", isAlwaysOnTop);
×
100
            frame.setAlwaysOnTop(isAlwaysOnTop);
×
101

102
            frame.setVisible(true);
×
103
        });
×
104
    }
×
105

106
    public MainFrame() {
107
        super();
×
108
        initialize();
×
109
        if (SystemTray.isSupported()) {
×
110
            configSystemTray();
×
111
        }
112

113
        setTitle(MessageFormat.format(bundle.getString("main.title"), Version.VERSION));
×
114
        setDefaultCloseOperation(EXIT_ON_CLOSE);
×
115
        setMenuBar();
×
116
        contentPane = new JPanel();
×
117
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
×
118
        contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.Y_AXIS));
×
119
        contentPane.add(Box.createVerticalGlue());
×
120
        EasyPanel initPanel = new AboutPanel();
×
121
        initPanel.init();
×
122
        initPanel.setBorder(BorderFactory.createTitledBorder(bundle.getString("help.about.title")));
×
123
        contentPane.add(initPanel);
×
124
        contentPane.add(Box.createVerticalGlue());
×
125
        setContentPane(contentPane);
×
126
        refreshSizeAndLocation();
×
127
    }
×
128

129
    private void configSystemTray() {
130
        SystemTray systemTray = SystemTray.getSystemTray();
×
131
        PopupMenu popupMenu = new PopupMenu();
×
132
        final MenuItem show = new MenuItem("Open");
×
133
        final MenuItem exit = new MenuItem("Close");
×
134
        ActionListener actionListener = e -> {
×
135
            if (e.getSource() == show) {
×
136
                setExtendedState(NORMAL);
×
137
                setVisible(true);
×
138
            }
139
            if (e.getSource() == exit) {
×
140
                dispatchEvent(new WindowEvent(this, WindowEvent.WINDOW_CLOSING));
×
141
            }
142
        };
×
143
        exit.addActionListener(actionListener);
×
144
        show.addActionListener(actionListener);
×
145
        popupMenu.add(show);
×
146
        popupMenu.add(exit);
×
147
        TrayIcon trayIcon = new TrayIcon(image, "系统托盘", popupMenu);
×
148
        trayIcon.setImageAutoSize(true);
×
149
        try {
150
            systemTray.add(trayIcon);
×
151
        } catch (AWTException e) {
×
152
            logger.error("add icon to tray failed");
×
153
        }
×
154
        trayIcon.addMouseListener(new MouseAdapter() {
×
155
            @Override
156
            public void mouseClicked(MouseEvent e) {
157
                if (e.getClickCount() == 2) {
×
158
                    setExtendedState(NORMAL);
×
159
                    setVisible(true);
×
160
                }
161
            }
×
162
        });
163
    }
×
164

165
    private void setMenuBar() {
166
        menuBar = new JMenuBar();
×
167
        setJMenuBar(menuBar);
×
168

169
        createReverseMenu();
×
170

171
        createAndroidMenu();
×
172

173
        createPdfMenu();
×
174

175
        createFileMenu();
×
176

177
        createConvertMenu();
×
178

179
        createHelpMenu();
×
180
    }
×
181

182
    private void createHelpMenu() {
183
        JMenu helpMenu = new JMenu(bundle.getString("help.title"));
×
184
        menuBar.add(helpMenu);
×
185

186
        JMenuItem documentMenuItem = new JMenuItem(bundle.getString("help.document.title"));
×
187
        documentMenuItem.addActionListener(new ChangeMenuToUrlListener(Constant.URL_DOCUMENT));
×
188
        helpMenu.add(documentMenuItem);
×
189

190
        JMenuItem settingsMenuItem = new JMenuItem(bundle.getString("help.settings.title"));
×
191
        settingsMenuItem.addActionListener(new ChangeMenuToPanelListener(SettingsPanel.class, settingsMenuItem.getText()));
×
192
        helpMenu.add(settingsMenuItem);
×
193

194
        JMenuItem feedbackMenuItem = new JMenuItem(bundle.getString("help.feedback.title"));
×
195
        feedbackMenuItem.addActionListener(new ChangeMenuToUrlListener(Constant.URL_FEEDBACK));
×
196
        helpMenu.add(feedbackMenuItem);
×
197

198
        JMenuItem checkUpdateMenuItem = new JMenuItem(bundle.getString("help.checkupdate.title"));
×
199
        checkUpdateMenuItem.addActionListener(new CheckUpdateActionListener(this));
×
200
        helpMenu.add(checkUpdateMenuItem);
×
201

202
        JMenuItem contributeMenuItem = new JMenuItem(bundle.getString("help.contribute.title"));
×
203
        contributeMenuItem.addActionListener(new ChangeMenuToUrlListener(Constant.URL_CONTRIBUTE));
×
204
        helpMenu.add(contributeMenuItem);
×
205

206
        JMenuItem aboutMenuItem = new JMenuItem(bundle.getString("help.about.title"));
×
207
        aboutMenuItem.addActionListener(new ChangeMenuToPanelListener(AboutPanel.class, aboutMenuItem.getText()));
×
208
        helpMenu.add(aboutMenuItem);
×
209
    }
×
210

211
    private void createPdfMenu() {
212
        JMenu pdfMenu = new JMenu(bundle.getString("pdf.title"));
×
213
        menuBar.add(pdfMenu);
×
214

215
        JMenuItem pdfStatMenuItem = new JMenuItem(bundle.getString("pdf.stat.title"));
×
216
        pdfStatMenuItem.addActionListener(new ChangeMenuToPanelListener(PdfStatPanel.class, pdfStatMenuItem.getText()));
×
217
        pdfMenu.add(pdfStatMenuItem);
×
218

219
        JMenuItem pdfFinderMenuItem = new JMenuItem(bundle.getString("pdf.finder.title"));
×
220
        pdfFinderMenuItem.addActionListener(new ChangeMenuToPanelListener(PdfFinderPanel.class, pdfFinderMenuItem.getText()));
×
221
        pdfMenu.add(pdfFinderMenuItem);
×
222

223
        JMenuItem pdfPasswordRemoverMenuItem = new JMenuItem(bundle.getString("pdf.password.remover.title"));
×
224
        pdfPasswordRemoverMenuItem.addActionListener(new ChangeMenuToPanelListener(PdfPasswordRemoverPanel.class, pdfPasswordRemoverMenuItem.getText()));
×
225
        pdfMenu.add(pdfPasswordRemoverMenuItem);
×
226

227
        JMenuItem pic2PdfMenuItem = new JMenuItem(bundle.getString("pictures.to.pdf.title"));
×
228
        pic2PdfMenuItem.addActionListener(new ChangeMenuToPanelListener(Pic2PdfPanel.class, pic2PdfMenuItem.getText()));
×
229
        pdfMenu.add(pic2PdfMenuItem);
×
230
    }
×
231

232
    private void createFileMenu() {
233
        JMenu fileMenu = new JMenu(bundle.getString("file.title"));
×
234
        menuBar.add(fileMenu);
×
235

236
        JMenuItem osConvertMenuItem = new JMenuItem(bundle.getString("file.os.convert.title"));
×
237
        osConvertMenuItem.addActionListener(new ChangeMenuToPanelListener(OsConvertPanel.class, osConvertMenuItem.getText()));
×
238
        fileMenu.add(osConvertMenuItem);
×
239

240
        JMenuItem encodeConvertMenuItem = new JMenuItem(bundle.getString("file.encode.convert.title"));
×
241
        encodeConvertMenuItem.addActionListener(new ChangeMenuToPanelListener(EncodeConvertPanel.class, encodeConvertMenuItem.getText()));
×
242
        fileMenu.add(encodeConvertMenuItem);
×
243

244
        JMenuItem zhConvertMenuItem = new JMenuItem(bundle.getString("file.zh.convert.title"));
×
245
        zhConvertMenuItem.addActionListener(new ChangeMenuToPanelListener(ZhConvertPanel.class, zhConvertMenuItem.getText()));
×
246
        fileMenu.add(zhConvertMenuItem);
×
247

248
        JMenuItem duplicateFindMenuItem = new JMenuItem(bundle.getString("file.duplicate.title"));
×
249
        duplicateFindMenuItem.addActionListener(new ChangeMenuToPanelListener(DuplicateSearchPanel.class, duplicateFindMenuItem.getText()));
×
250
        fileMenu.add(duplicateFindMenuItem);
×
251

252
        JMenuItem batchRenameMenuItem = new JMenuItem(bundle.getString("file.batch.rename.title"));
×
253
        batchRenameMenuItem.addActionListener(new ChangeMenuToPanelListener(BatchRenamePanel.class, batchRenameMenuItem.getText()));
×
254
        fileMenu.add(batchRenameMenuItem);
×
255

256
        JMenuItem checkSumMenuItem = new JMenuItem(bundle.getString("file.check.summary.title"));
×
257
        checkSumMenuItem.addActionListener(new ChangeMenuToPanelListener(ChecksumPanel.class, checkSumMenuItem.getText()));
×
258
        fileMenu.add(checkSumMenuItem);
×
259

260
        JMenuItem recoveryMenuItem = new JMenuItem(bundle.getString("file.password.recovery.title"));
×
261
        recoveryMenuItem.addActionListener(new ChangeMenuToPanelListener(RecoveryPanel.class, recoveryMenuItem.getText()));
×
262
        fileMenu.add(recoveryMenuItem);
×
263
    }
×
264

265
    private void createConvertMenu() {
266
        JMenu convertMenu = new JMenu(bundle.getString("convert.title"));
×
267
        menuBar.add(convertMenu);
×
268

269
        JMenuItem colorConvertMenuItem = new JMenuItem(bundle.getString("convert.color.title"));
×
270
        colorConvertMenuItem.addActionListener(new ChangeMenuToPanelListener(ColorConvertPanel.class, colorConvertMenuItem.getText()));
×
271
        convertMenu.add(colorConvertMenuItem);
×
272

273
        JMenuItem colorTableMenuItem = new JMenuItem(bundle.getString("table.color.title"));
×
274
        colorTableMenuItem.addActionListener(new ChangeMenuToPanelListener(ColorTablePanel.class, colorTableMenuItem.getText()));
×
275
        convertMenu.add(colorTableMenuItem);
×
276

277
        JMenuItem colorPickerMenuItem = new JMenuItem(bundle.getString("picker.color.title"));
×
278
        colorPickerMenuItem.addActionListener(new ChangeMenuToPanelListener(ColorPickerPanel.class, colorPickerMenuItem.getText()));
×
279
        convertMenu.add(colorPickerMenuItem);
×
280

281
        JMenuItem encodingRecoveryMenuItem = new JMenuItem(bundle.getString("garbled.text.recovery.title"));
×
282
        encodingRecoveryMenuItem.addActionListener(new ChangeMenuToPanelListener(GarbledTextRecoveryPanel.class, encodingRecoveryMenuItem.getText()));
×
283
        convertMenu.add(encodingRecoveryMenuItem);
×
284

285
        JMenuItem asciiViewerMenuItem = new JMenuItem(bundle.getString("ascii.viewer.title"));
×
286
        asciiViewerMenuItem.addActionListener(new ChangeMenuToPanelListener(AsciiGbViewerPanel.class, asciiViewerMenuItem.getText()));
×
287
        convertMenu.add(asciiViewerMenuItem);
×
288

289
        JMenuItem unsupervisedProtobufConvertMenuItem = new JMenuItem(bundle.getString("convert.protobuf.unsupervised.title"));
×
290
        unsupervisedProtobufConvertMenuItem.addActionListener(new ChangeMenuToPanelListener(UnsupervisedProtobufConvertPanel.class, unsupervisedProtobufConvertMenuItem.getText()));
×
291
        convertMenu.add(unsupervisedProtobufConvertMenuItem);
×
292

293
        JMenuItem supervisedProtobufConvertMenuItem = new JMenuItem(bundle.getString("convert.protobuf.supervised.title"));
×
294
        supervisedProtobufConvertMenuItem.addActionListener(new ChangeMenuToPanelListener(SupervisedProtobufConvertPanel.class, supervisedProtobufConvertMenuItem.getText()));
×
295
        convertMenu.add(supervisedProtobufConvertMenuItem);
×
296
    }
×
297

298
    private void createAndroidMenu() {
299
        JMenu androidMenu = new JMenu(bundle.getString("android.title"));
×
300
        menuBar.add(androidMenu);
×
301

302
        JMenuItem i18nAddMenuItem = new JMenuItem(bundle.getString("android.i18n.add.title"));
×
303
        i18nAddMenuItem.addActionListener(new ChangeMenuToPanelListener(I18nAddPanel.class, i18nAddMenuItem.getText()));
×
304
        androidMenu.add(i18nAddMenuItem);
×
305

306
        JMenuItem i18nFindLongestMenuItem = new JMenuItem(bundle.getString("android.i18n.longest.title"));
×
307
        i18nFindLongestMenuItem.addActionListener(new ChangeMenuToPanelListener(I18nFindLongestPanel.class, i18nFindLongestMenuItem.getText()));
×
308
        androidMenu.add(i18nFindLongestMenuItem);
×
309

310
        JMenuItem i18nRemoveMenuItem = new JMenuItem(bundle.getString("android.i18n.remove.title"));
×
311
        i18nRemoveMenuItem.addActionListener(new ChangeMenuToPanelListener(I18nRemovePanel.class, i18nRemoveMenuItem.getText()));
×
312
        androidMenu.add(i18nRemoveMenuItem);
×
313

314
        JMenuItem screenShotMenuItem = new JMenuItem(bundle.getString("android.screenshot.title"));
×
315
        screenShotMenuItem.addActionListener(new ChangeMenuToPanelListener(ScreenShotPanel.class, screenShotMenuItem.getText()));
×
316
        screenShotMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_DOWN_MASK));
×
317
        androidMenu.add(screenShotMenuItem);
×
318

319
        JMenuItem monkeyMenuItem = new JMenuItem(bundle.getString("android.monkey.title"));
×
320
        monkeyMenuItem.addActionListener(new ChangeMenuToPanelListener(MonkeyPanel.class, monkeyMenuItem.getText()));
×
321
        androidMenu.add(monkeyMenuItem);
×
322

323
        JMenuItem dumpsysMenuItem = new JMenuItem(bundle.getString("android.dumpsys.title"));
×
324
        dumpsysMenuItem.addActionListener(new ChangeMenuToPanelListener(DumpsysPanel.class, dumpsysMenuItem.getText()));
×
325
        androidMenu.add(dumpsysMenuItem);
×
326
    }
×
327

328
    private void createReverseMenu() {
329
        JMenu reverseMenu = new JMenu(bundle.getString("reverse.title"));
×
330
        reverseMenu.setMnemonic(KeyEvent.VK_R);
×
331
        menuBar.add(reverseMenu);
×
332

333
        JMenuItem pluginVersionMenuItem = new JMenuItem(bundle.getString("reverse.plugin.version.title"));
×
334
        pluginVersionMenuItem.addActionListener(new ChangeMenuToUrlListener(Constant.URL_PLUGIN_VERSION));
×
335
        reverseMenu.add(pluginVersionMenuItem);
×
336

337
        JMenuItem apktoolMenuItem = new JMenuItem(bundle.getString("reverse.apktool.title"), KeyEvent.VK_D);
×
338
        apktoolMenuItem.addActionListener(new ChangeMenuToPanelListener(ApktoolPanel.class, apktoolMenuItem.getText()));
×
339
        reverseMenu.add(apktoolMenuItem);
×
340

341
        JMenuItem apkSignMenuItem = new JMenuItem(bundle.getString("reverse.apksigner.title"));
×
342
        apkSignMenuItem.addActionListener(new ChangeMenuToPanelListener(ApkSignerPanel.class, apkSignMenuItem.getText()));
×
343
        reverseMenu.add(apkSignMenuItem);
×
344

345
        JMenuItem jDMenuItem = new JMenuItem(bundle.getString("reverse.jd.gui.title"));
×
346
        jDMenuItem.addActionListener(new ChangeMenToPluginJdListener());
×
347
        reverseMenu.add(jDMenuItem);
×
348

349
        JMenuItem bytecodeViewerMenuItem = new JMenuItem(bundle.getString("reverse.bytecode.viewer.title"));
×
350
        bytecodeViewerMenuItem.addActionListener(new ChangeMenuToPluginBytecodeViewerListener());
×
351
        reverseMenu.add(bytecodeViewerMenuItem);
×
352

353
        JMenuItem luytenMenuItem = new JMenuItem(bundle.getString("reverse.luyten.title"));
×
354
        luytenMenuItem.addActionListener(new ChangeMenuToPluginLuytenListener());
×
355
        reverseMenu.add(luytenMenuItem);
×
356

357
        JMenuItem jdDuoMenuItem = new JMenuItem(bundle.getString("reverse.jd.duo.title"));
×
358
        jdDuoMenuItem.addActionListener(new ChangeMenuToPluginJdDuoListener());
×
359
        reverseMenu.add(jdDuoMenuItem);
×
360

361
        JMenuItem jdaMenuItem = new JMenuItem(bundle.getString("reverse.jda.title"));
×
362
        jdaMenuItem.addActionListener(new ChangeMenuToPluginJdaListener());
×
363
        reverseMenu.add(jdaMenuItem);
×
364

365
        JMenuItem jADXMenuItem = new JMenuItem(bundle.getString("reverse.jadx.title"));
×
366
        jADXMenuItem.addActionListener(new ChangeMenuToPluginJadxListener());
×
367
        reverseMenu.add(jADXMenuItem);
×
368

369
        JMenuItem aXMLPrinter = new JMenuItem(bundle.getString("reverse.axmlprinter.title"));
×
370
        aXMLPrinter.addActionListener(new ChangeMenuToPanelListener(AxmlPrinterPanel.class, aXMLPrinter.getText()));
×
371
        reverseMenu.add(aXMLPrinter);
×
372
    }
×
373

374
    class ChangeMenuToPanelListener implements ChangeMenuListener {
375

376
        Class<? extends EasyPanel> easyPanelClass;
377

378
        EasyPanel panel = null;
×
379

380
        String title;
381

382
        public ChangeMenuToPanelListener(Class<? extends EasyPanel> easyPanelClass, String title) {
×
383
            this.easyPanelClass = easyPanelClass;
×
384
            this.title = title;
×
385
            panel = createEasyPanel();
×
386
        }
×
387

388
        @Override
389
        public boolean isNeedPreChangeMenu() {
390
            return panel.isNeedPreChangeMenu();
×
391
        }
392

393
        @Override
394
        public void onPreChangeMenu(IPreChangeMenuCallBack callBack) {
395
            if (panel instanceof PluginPanel pluginPanel) {
×
396
                pluginPanel.preparePlugin(new ChangeMenuPreparePluginController(pluginPanel.getPluginFilename(), pluginPanel.isPluginNeedUnzip(), pluginPanel.isPluginNeedUnzipToSeparateDir(), callBack));
×
397
            }
398
        }
×
399

400
        @Override
401
        public void onChangeMenu() {
402
            UiStateKeeper.save(currentEasyPanel);
×
403
            contentPane.removeAll();
×
404
            contentPane.add(Box.createVerticalGlue());
×
405
            panel.init();
×
406
            panel.setBorder(BorderFactory.createTitledBorder(title));
×
407
            contentPane.add(panel);
×
408
            logger.info("Panel changed: " + panel.getClass().getSimpleName());
×
409
            contentPane.add(Box.createVerticalGlue());
×
410
            contentPane.revalidate();
×
411
            contentPane.repaint();
×
412
            refreshSizeAndLocation();
×
413
            panel.afterPainted();
×
414
            UiStateKeeper.restore(panel);
×
415
            currentEasyPanel = panel;
×
416
        }
×
417

418
        private EasyPanel createEasyPanel() {
419
            if (easyPanelClass == null) {
×
420
                return new EasyPanel();
×
421
            }
422
            EasyPanel retEasyPanel = null;
×
423
            try {
424
                retEasyPanel = easyPanelClass.getDeclaredConstructor().newInstance();
×
425
            } catch (InstantiationException | IllegalAccessException | InvocationTargetException |
×
426
                     NoSuchMethodException e) {
427
                logger.info("createEasyPanel failed: {}", e.getMessage());
×
428
            }
×
429
            return Objects.requireNonNullElseGet(retEasyPanel, EasyPanel::new);
×
430
        }
431
    }
432

433
    @Override
434
    protected void onWindowClosing(WindowEvent e) {
435
        super.onWindowClosing(e);
×
436
        UiStateKeeper.save(currentEasyPanel);
×
437
    }
×
438

439
    @Override
440
    protected void onWindowIconified(WindowEvent e) {
441
        super.onWindowIconified(e);
×
442
        UiStateKeeper.save(currentEasyPanel);
×
443
    }
×
444
}
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