Package kakuro.gui.editor

Source Code of kakuro.gui.editor.ListSkeletonDialog$SkeletonJPanel

package kakuro.gui.editor;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.util.*;
import kakuro.server.ISkeletonTable;

/** Skeleton listázó dialógus. */
public class ListSkeletonDialog extends JDialog {
  /** megnyitás */
  private JButton openButton = null;
  private final String CMD_CANCEL = "Cancel";
  private final String CMD_OPEN = "Open";
  /** érvényes */
  private boolean valid = false;
  /** címsor */
  private String title = null;
  /** skeleton lista */
  private java.util.List<ISkeletonTable> _list = null;
  /** sorok száma */
  private JLabel rowCountLabel = null;
  /** oszlopok száma */
  private JLabel columnCountLabel = null;
  /** Skeleton preview panel */
  private SkeletonJPanel skeletonPanel = null;
  /** lista */
  private JList dataList = null;

  /** A listázó dialógust rakja össze, a kapott list alapján
   *
   * @param parent szülő frame
   * @param t címsor
   * @param list skeleton-ok listája
   * */
  public ListSkeletonDialog(JFrame parent, String t, java.util.List<ISkeletonTable> list) {
    super(parent, true);
    title = t;
    _list = new ArrayList<ISkeletonTable>(list);
    initComponents();
    setSize(480, 320);
    pack();
  }
 
  /** Kiválasztott skeleton sorszámát kéri le
   *
   * @return skeleton sorszáma
   * */
  public int getSelection() {
      return dataList.getSelectedIndex();
  }

  /** Swing komponenseket rakja össze */
  private void initComponents() {
    getContentPane().setLayout(new BoxLayout(getContentPane(), BoxLayout.PAGE_AXIS));
    setTitle(title);
    addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent event) {
        windowAction(CMD_CANCEL);
      }
    });
    JPanel content = new JPanel();
    content.setLayout(new BoxLayout(content, BoxLayout.LINE_AXIS));
    String[] data = new String[_list.size()];
    for (int i=0; i<_list.size(); i++) {
        ISkeletonTable s = _list.get(i);
        String[] difficulties = {"K&ouml;nny&#369;", "K&ouml;zepes", "Neh&eacute;z"};
        data[i] = "<html>"+(i+1)+". "+difficulties[s.getDifficulty()]+"</html>";
    }
    dataList = new JList(data);
    dataList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    dataList.addListSelectionListener(new ListSelectionListener() {
      int _previous = -1;
        public void valueChanged(ListSelectionEvent e) {
          int index = dataList.getSelectedIndex();
          if (_previous==index) return;
          _previous = index;
          rowCountLabel.setText(_list.get(index).getRowCount()+"");
          columnCountLabel.setText(_list.get(index).getColumnCount()+"");
          skeletonPanel.load(_list.get(index));
          pack();
        }
    });
    JScrollPane scrollPane = new JScrollPane(dataList);
    content.add(scrollPane);
    scrollPane.setMinimumSize(new Dimension(120, 240));
    JPanel details = new JPanel();
    details.setLayout(new GridLayout(2, 2, 5, 5));
    details.add(new JLabel("<html>Sorok sz&aacute;ma</html>"));
    rowCountLabel = new JLabel("4");
    details.add(rowCountLabel);
    details.add(new JLabel("<html>Oszlopok sz&aacute;ma</html>"));
    columnCountLabel = new JLabel("4");
    details.add(columnCountLabel);
    content.add(details);
    skeletonPanel = new SkeletonJPanel();
    skeletonPanel.load(_list.get(0));
    content.add(skeletonPanel);
   
    getContentPane().add(content);
    JPanel buttonPanel = createButtonPanel(); // sets global openButton
    getContentPane().add(buttonPanel);
    dataList.setSelectedIndex(0);
  }

  /** Gomb-sor összerakása
   *
   * @return kész gombsor
   * */
  private JPanel createButtonPanel() {
    JPanel panel = new JPanel();
    panel.setLayout(new BoxLayout(panel, 0));
    openButton = new JButton();
    openButton.setText("<html>Megnyit&aacute;s</html>");
    openButton.setActionCommand(CMD_OPEN);
    openButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent event) {
        windowAction(event);
      }
    });
    panel.add(openButton);
    panel.add(Box.createRigidArea(new Dimension(5, 0)));

    JButton cancelButton = new JButton();
    cancelButton.setText("<html>M&eacute;gse</html>");
    cancelButton.setActionCommand(CMD_CANCEL);
    cancelButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent event) {
        windowAction(event);
      }
    });
    panel.add(cancelButton);
    return panel;
  }

  /** Segédfüggvény, beállítja a kapott actionCommand alapján, hogy érvényes-e a választás, és bezárja a
   * dialógust
   *
   * @param actionCommand action amit valamelyik gomb megnyomása vált ki
   * */
  private void windowAction(Object actionCommand) {
    String cmd = null;
    if (actionCommand != null) {
      if (actionCommand instanceof ActionEvent) {
        cmd = ((ActionEvent) actionCommand).getActionCommand();
      } else {
        cmd = actionCommand.toString();
      }
    }
    if (cmd == null) {
    } else if (cmd.equals(CMD_CANCEL)) {
      valid = false;
    } else if (cmd.equals(CMD_OPEN)) {
      valid = true;
    }
    setVisible(false);
    dispose();
  }

  /** Érvényes választás volt-e. Ha bezárták X-szel az ablakot, vagy mégse, az nem érvényes.
   *
   * @return true ha megnyitás volt, false minden más esetben
   * */
  public boolean isValid() {
    return valid;
  }
 
  /** Egyetlen feladata, hogy a belsejében lévő preview panelt négyzet alakúra hozza. */
  public class SkeletonJPanel extends JPanel {
    /** skeleton modell */
      ISkeletonTable _skeleton = null;
      /** skeleton preview panel */
      SkeletonPanel _panel = null;
     
      /** Hátteret átlátszóvá teszi, és beállítja a speciális layout managert. */
      public SkeletonJPanel() {
        setOpaque(false);
      setLayout(new kakuro.gui.SquareLayoutManager());
      }
     
      /** A kapott modellt betölti a preview panelbe
       *
       * @param s skeleton modell
       * */
      public void load(ISkeletonTable s) {
        _skeleton = s;
        if (_panel!=null) remove(_panel);
        _panel = new SkeletonPanel(null, true);
        _panel.load(_skeleton);
        add(_panel);
      }
  }
}
TOP

Related Classes of kakuro.gui.editor.ListSkeletonDialog$SkeletonJPanel

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.