/* * SK's Minecraft Launcher * Copyright (C) 2010-2014 Albert Pham <http://www.sk89q.com> and contributors * Please see LICENSE.txt for license information. */ package com.skcraft.launcher.creator.dialog; import com.skcraft.launcher.creator.model.creator.Problem; import com.skcraft.launcher.creator.model.swing.ProblemTableModel; import com.skcraft.launcher.swing.SwingHelper; import com.skcraft.launcher.swing.TextFieldPopupMenu; import net.miginfocom.swing.MigLayout; import javax.swing.*; import java.awt.*; import java.awt.event.KeyEvent; import java.util.List; public class ProblemViewer extends JDialog { private static final String DEFAULT_EXPLANATION = "Select a problem on the left to see the explanation here."; private final ProblemTable problemTable = new ProblemTable(); private final ProblemTableModel problemTableModel; private final JTextArea explanationText = new JTextArea(DEFAULT_EXPLANATION); public ProblemViewer(Window parent, List<Problem> problems) { super(parent, "Potential Problems", ModalityType.DOCUMENT_MODAL); setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); initComponents(); pack(); setLocationRelativeTo(parent); problemTableModel = new ProblemTableModel(problems); problemTable.setModel(problemTableModel); } private void initComponents() { explanationText.setComponentPopupMenu(TextFieldPopupMenu.INSTANCE); explanationText.setFont(new JTextField().getFont()); explanationText.setEditable(false); explanationText.setLineWrap(true); explanationText.setWrapStyleWord(true); JPanel container = new JPanel(); container.setLayout(new MigLayout("fill, insets dialog")); JSplitPane splitPane = new JSplitPane( JSplitPane.HORIZONTAL_SPLIT, SwingHelper.wrapScrollPane(problemTable), SwingHelper. wrapScrollPane(explanationText)); splitPane.setDividerLocation(180); SwingHelper.flattenJSplitPane(splitPane); container.add(splitPane, "grow, w 220:500, h 240, wrap"); JButton closeButton = new JButton("Close"); container.add(closeButton, "tag cancel, gaptop unrel"); add(container, BorderLayout.CENTER); getRootPane().setDefaultButton(closeButton); getRootPane().registerKeyboardAction(e -> closeButton.doClick(), KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_IN_FOCUSED_WINDOW); problemTable.getSelectionModel().addListSelectionListener(e -> { Problem selected = problemTableModel.getProblem(problemTable.getSelectedRow()); if (selected != null) { SwingHelper.setTextAndResetCaret(explanationText, selected.getExplanation()); } }); closeButton.addActionListener(e -> dispose()); } }