/
spirzen
/
it-code-examples
Обзор
Документация
Войти
/
spirzen
/
it-code-examples
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
examples/java/java-503-253-006/main.java
140 строк
5 KB
Spirzen
Code migration pack
09 июн 2026, 01:41
09 июн 2026, 01:41
cebc284
Код
Авторство
О чём код?
package com.xmlvalidator.ui; import com.xmlvalidator.model.ValidationResult; import com.xmlvalidator.service.XsdValidatorService; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JSplitPane; import javax.swing.SwingUtilities; import javax.swing.SwingWorker; import javax.swing.UIManager; import javax.swing.WindowConstants; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.GridLayout; import java.awt.event.KeyEvent; import java.nio.file.Path; public final class XmlValidatorFrame extends JFrame { private final XsdValidatorService validatorService = new XsdValidatorService(); private final FilePanel xmlPanel = new FilePanel("XML-документ", "xml", "Выберите XML-файл"); private final FilePanel xsdPanel = new FilePanel("XSD-схема", "xsd", "Выберите XSD-файл"); private final ResultPanel resultPanel = new ResultPanel(); private final JButton validateButton = new JButton("Проверить"); private final JButton clearButton = new JButton("Очистить"); public XmlValidatorFrame() { super("XML Validator — проверка по XSD"); setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); setMinimumSize(new Dimension(960, 640)); setLocationRelativeTo(null); JPanel content = new JPanel(new BorderLayout(12, 12)); content.setBorder(BorderFactory.createEmptyBorder(12, 12, 12, 12)); JPanel editors = new JPanel(new GridLayout(1, 2, 12, 0)); editors.add(xmlPanel); editors.add(xsdPanel); JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, editors, resultPanel); splitPane.setResizeWeight(0.72); splitPane.setContinuousLayout(true); content.add(splitPane, BorderLayout.CENTER); JPanel actions = new JPanel(new FlowLayout(FlowLayout.RIGHT, 8, 0)); validateButton.setMnemonic(KeyEvent.VK_V); clearButton.setMnemonic(KeyEvent.VK_C); actions.add(clearButton); actions.add(validateButton); content.add(actions, BorderLayout.SOUTH); setContentPane(content); validateButton.addActionListener(e -> runValidation()); clearButton.addActionListener(e -> clearAll()); getRootPane().setDefaultButton(validateButton); } private void clearAll() { xmlPanel.clear(); xsdPanel.clear(); resultPanel.reset(); } private void runValidation() { validateButton.setEnabled(false); clearButton.setEnabled(false); resultPanel.showPending(); SwingWorker<ValidationResult, Void> worker = new SwingWorker<>() { @Override protected ValidationResult doInBackground() { Path xmlPath = xmlPanel.getSelectedPath(); Path xsdPath = xsdPanel.getSelectedPath(); String xmlText = xmlPanel.getText(); String xsdText = xsdPanel.getText(); boolean hasXmlFile = xmlPath != null && !xmlText.isBlank(); boolean hasXsdFile = xsdPath != null && !xsdText.isBlank(); if (hasXmlFile && hasXsdFile && xmlText.equals(readQuietly(xmlPath)) && xsdText.equals(readQuietly(xsdPath))) { return validatorService.validate(xmlPath, xsdPath); } return validatorService.validate(xmlText, xsdText); } @Override protected void done() { try { resultPanel.showResult(get()); } catch (Exception ex) { resultPanel.showError(ex.getMessage() != null ? ex.getMessage() : "Неизвестная ошибка при валидации."); } finally { validateButton.setEnabled(true); clearButton.setEnabled(true); } } }; worker.execute(); } private static String readQuietly(Path path) { try { return java.nio.file.Files.readString(path); } catch (Exception ignored) { return ""; } } public static void launch() { applyLookAndFeel(); SwingUtilities.invokeLater(() -> { XmlValidatorFrame frame = new XmlValidatorFrame(); frame.setVisible(true); }); } private static void applyLookAndFeel() { try { for (UIManager.LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) { if ("Nimbus".equals(info.getName())) { UIManager.setLookAndFeel(info.getClassName()); return; } } UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception ignored) { // оставляем L&F по умолчанию } } }