Package general

Source Code of general.Main

package general;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.KeyboardFocusManager;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
import java.io.IOException;
import java.io.PrintStream;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

import utils.CardUtils;
import utils.Log;
import algorithms.DealingAlgorithm;

public class Main extends JFrame{

  private static final long serialVersionUID = 3206847208968227199L;
  private final Toolkit toolkit = getToolkit();
  private JPanel textPanel;
  private JPanel[] cardLimits;
  private JTextField[][] rangeFields;
  private JTextField[][][] cardLimitsFields;
  private JTextField pathField;
  private File outputFile;
  private String filename;
  private Config config = Config.getInstance();
  private DealingAlgorithm algorithm;
  private Card[] deck;
  private int handsNumber;
  private JTextField handsNumberField;

  public Main() {
    Log.write("Starting application");
    this.loadConfig();
  }

  private void loadConfig()
  { 
    deck = CardUtils.createAll();
    this.handsNumber = config.getHands();
    this.algorithm = config.getAlgorithm();
  }

  private void centerWindow()
  {
    Dimension size = toolkit.getScreenSize();
    setLocation(size.width/2 - getWidth()/2,
        size.height/2 - getHeight()/2);
  }

  public void run(){
    filename = System.getProperty("user.home")+File.separatorChar + "hands.html";
    this.outputFile = new File(filename);
    setTitle("Bridge hand dealer");
    setSize(350,710);
    centerWindow();
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setResizable(false);
    int align = FlowLayout.CENTER;
    setLayout(new FlowLayout(align));

    String[] names = new String[]{"North","East","South","West"};
    rangeFields = new JTextField[4][2];
    JLabel label = new JLabel("Players score limits");
    this.add(label);

    textPanel = new JPanel(new GridLayout(4,3,3,3));
    textPanel.setBorder(BorderFactory.createEmptyBorder(10, 20, 10, 20));
    for (int i=0;i<4;i++)
    {
      Range range = algorithm.getPointlimit(i);
      rangeFields[i][0] = new JTextField(""+range.getMin(),2);
      rangeFields[i][1] = new JTextField(""+range.getMax(),2);
      textPanel.add(new JLabel(names[i]));
      textPanel.add(rangeFields[i][0]);
      textPanel.add(rangeFields[i][1]);
    }

    this.add(textPanel);

    cardLimits = new JPanel[4];
    cardLimitsFields = new JTextField[4][4][2];
    for (int i=0; i< cardLimits.length;i++)
    {
      label = new JLabel(names[i] + " cards limits");
      this.add(label);

      cardLimits[i] = new JPanel(new GridLayout(4,3,3,3));
      cardLimits[i].setBorder(BorderFactory.createEmptyBorder(10, 20, 10, 20));

      for (Symbol sym: Symbol.values())
      {
        Range range = algorithm.getCardLimit(i, sym.getLocation());
        cardLimitsFields[i][sym.getLocation()][0] = new JTextField(""+range.getMin(),3);
        cardLimitsFields[i][sym.getLocation()][1] = new JTextField(""+range.getMax(),3);
        cardLimits[i].add(new JLabel(""+sym.getUnicode()));
        cardLimits[i].add(cardLimitsFields[i][sym.getLocation()][0]);
        cardLimits[i].add(cardLimitsFields[i][sym.getLocation()][1]);
      }

      this.add(cardLimits[i]);
    }


    //textPanel.setAlignmentX(Component.CENTER_ALIGNMENT);
    this.add(new JLabel("       Filename:"));

    pathField = new JTextField(filename,20);
    pathField.setEditable(false);
    this.add(pathField);

    this.add(new JLabel("  num of hands:"));
    handsNumberField = new JTextField(""+this.handsNumber,20);
    this.add(handsNumberField);

    JButton fileButton = new JButton("File");
    fileButton.addActionListener(new ActionListener() {
      private JFileChooser file;

      public void actionPerformed(ActionEvent event) {
        file = new JFileChooser(filename);
        int ans = file.showSaveDialog(textPanel);
        if (ans == JFileChooser.APPROVE_OPTION){
          outputFile = file.getSelectedFile();
          pathField.setText(outputFile.getAbsolutePath());
        }
      }
    });
    this.add(fileButton);

    JButton goButton = new JButton("Go");
    goButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent event) {
        final JButton b = (JButton)event.getSource();
        b.setEnabled(false);

        Thread worker = new Thread() {
          public void run() {
            executeRun();

            // Report the result using invokeLater().
            SwingUtilities.invokeLater(new Runnable() {
              public void run() {
                b.setEnabled(true);
              }
            });
          }
        };

        worker.start(); // So we don't hold up the dispatch thread.
      }
    });
   
    this.add(goButton);


    JButton exitButton = new JButton("Exit");
    exitButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent event) {
        saveConfig();
        System.exit(0);
      }
    });
    this.add(exitButton);

    KeyboardFocusManager.getCurrentKeyboardFocusManager()
    .addPropertyChangeListener("permanentFocusOwner", new PropertyChangeListener()
    {
      public void propertyChange(final PropertyChangeEvent e)
      {
        if (e.getNewValue() instanceof JTextField)
        {
          SwingUtilities.invokeLater(new Runnable()
          {
            public void run()
            {
              JTextField textField = (JTextField)e.getNewValue();
              textField.selectAll();
            }
          });

        }
      }
    });

  }

  private void executeRun()
  {
    setRanges();
    try
    {
      this.handsNumber = Integer.parseInt(handsNumberField.getText());
    }catch( Exception ex)
    {
      ;
    }
    config.setHands(this.handsNumber);
    this.algorithm.setNum(this.handsNumber);
    saveConfig();

    System.out.println("Running");
    PrintStream out = System.out;
    try {
      System.setOut(new PrintStream(outputFile,"UTF-8"));
      algorithm.deal(this.deck);
     
    } catch (Exception e) {
      e.printStackTrace();
    }
    finally{
      System.out.close();
      System.setOut(out);
    }
    System.out.println("Finished");
    this.afterRun();
  }

  private void saveConfig()
  {
    algorithm.saveConfig();
    config.save();
  }

  private void setRanges()
  {
    for (int i=0;i<4;i++)
    {
      algorithm.addPointLimit(i, Integer.parseInt(this.rangeFields[i][0].getText()), Integer.parseInt(this.rangeFields[i][1].getText()));
      for (Symbol symb: Symbol.values())
      {
        algorithm.addCardLimit(i, symb.getLocation(), Integer.parseInt(this.cardLimitsFields[i][symb.getLocation()][0].getText()), Integer.parseInt(this.cardLimitsFields[i][symb.getLocation()][1].getText()));
      }
    }
  }

  private void afterRun()
  {
    String os = System.getProperty("os.name");
    if (os.toLowerCase().contains("windows"))
    {
      System.out.println("here1");
      try {
        String[] cmd = new String[]{"cmd","/C",""+(char)34+outputFile.getAbsolutePath()+(char)34};
        //String cmd = "cmd /C start " + (char)34+outputFile.getAbsolutePath()+(char)34;
        Runtime.getRuntime().exec(cmd);
      } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    }
    else
    {
      System.out.println("here2");
      try {
        Runtime.getRuntime().exec("gnome-open " + outputFile.getAbsolutePath());
      } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    }
  }
 
  public static void main(String[] args) {
    Main main = new Main();
    main.run();
    main.setVisible(true);
    Log.close();
  }
}
TOP

Related Classes of general.Main

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.