Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.awt.EventQueue;
- import java.awt.Font;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.awt.event.KeyEvent;
- import java.awt.event.KeyListener;
- import java.awt.event.MouseEvent;
- import java.awt.event.MouseListener;
- import java.text.DecimalFormat;
- import java.util.ArrayList;
- import javax.swing.GroupLayout;
- import javax.swing.GroupLayout.Alignment;
- import javax.swing.JFrame;
- import javax.swing.JLabel;
- import javax.swing.JPanel;
- import javax.swing.JTextField;
- import javax.swing.LayoutStyle.ComponentPlacement;
- import javax.swing.Timer;
- import javax.swing.border.EmptyBorder;
- public class ReeferGUI extends JFrame
- {
- private static final long serialVersionUID = 1L;
- private JPanel contentPane;
- private JLabel lblPercent1 = new JLabel("%");;
- private JLabel labelPercent2 = new JLabel("%");;
- private JLabel lblWeedAmtG = new JLabel("Weed Amount (g)");
- private JLabel labelDabAmtG = new JLabel("Dab Amount (g)");
- private JLabel lblWeedAmtO = new JLabel("Weed Amount (O)");
- private JLabel lblDabAmtO = new JLabel("Dab Amount (O)");
- private JLabel lblWeedPotency = new JLabel("THC Potency (Weed)");
- private JLabel lblDabPotency = new JLabel("THC Potency (Dabs)");
- private JTextField weedAmtG, // 0
- dabAmtG, // 1
- weedAmtO, // 2 These are the index's of each of the TextFields in
- dabAmtO, // 3 textFieldList in the TimerListener class.
- weedPotency, // 4
- dabPotency; // 5
- public ReeferGUI()
- {
- setTitle("Reefer");
- setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- setBounds(100, 100, 219, 272);
- contentPane = new JPanel();
- contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
- setContentPane(contentPane);
- weedAmtG = new JTextField();
- weedAmtG.setColumns(10);
- TextFieldListener weedAmtGListener = new TextFieldListener(weedAmtG, true);
- weedAmtG.addKeyListener(weedAmtGListener);
- weedAmtG.addMouseListener(weedAmtGListener);
- dabAmtG = new JTextField();
- dabAmtG.setColumns(10);
- TextFieldListener dabAmtGListener = new TextFieldListener(dabAmtG, true);
- dabAmtG.addKeyListener(dabAmtGListener);
- dabAmtG.addMouseListener(dabAmtGListener);
- weedAmtO = new JTextField();
- weedAmtO.setColumns(10);
- TextFieldListener weedAmtOListener = new TextFieldListener(weedAmtO, true);
- weedAmtO.addKeyListener(weedAmtOListener);
- weedAmtO.addMouseListener(weedAmtOListener);
- dabAmtO = new JTextField();
- dabAmtO.setColumns(10);
- TextFieldListener dabAmtOListener = new TextFieldListener(dabAmtO, true);
- dabAmtO.addKeyListener(dabAmtOListener);
- dabAmtO.addMouseListener(dabAmtOListener);
- weedPotency = new JTextField();
- weedPotency.setColumns(10);
- TextFieldListener weedPotencyListener = new TextFieldListener(weedPotency, false);
- weedPotency.addKeyListener(weedPotencyListener);
- weedPotency.addMouseListener(weedPotencyListener);
- weedPotency.setHorizontalAlignment(JTextField.RIGHT);
- weedPotency.setText("17");
- dabPotency = new JTextField();
- dabPotency.setColumns(10);
- TextFieldListener dabPotencyListener = new TextFieldListener(dabPotency, false);
- dabPotency.addKeyListener(dabPotencyListener);
- dabPotency.addMouseListener(dabPotencyListener);
- dabPotency.setHorizontalAlignment(JTextField.RIGHT);
- dabPotency.setText("85");
- lblPercent1.setFont(new Font("Tahoma", Font.PLAIN, 12));
- labelPercent2.setFont(new Font("Tahoma", Font.PLAIN, 12));
- initializeComponentLayout();
- }
- private void initializeComponentLayout()
- {
- GroupLayout gl_contentPane = new GroupLayout(contentPane);
- gl_contentPane.setHorizontalGroup(
- gl_contentPane.createParallelGroup(Alignment.LEADING)
- .addGroup(gl_contentPane.createSequentialGroup()
- .addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING)
- .addGroup(gl_contentPane.createSequentialGroup()
- .addGroup(gl_contentPane.createParallelGroup(Alignment.TRAILING, false)
- .addComponent(lblWeedAmtG)
- .addComponent(weedAmtG, Alignment.LEADING)
- .addComponent(lblWeedAmtO, Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
- .addGap(18)
- .addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING)
- .addComponent(lblDabAmtO, GroupLayout.PREFERRED_SIZE, 87, GroupLayout.PREFERRED_SIZE)
- .addGroup(gl_contentPane.createSequentialGroup()
- .addGap(1)
- .addComponent(labelDabAmtG, GroupLayout.PREFERRED_SIZE, 85, GroupLayout.PREFERRED_SIZE))
- .addComponent(dabAmtG, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)))
- .addGroup(gl_contentPane.createSequentialGroup()
- .addComponent(weedAmtO, GroupLayout.PREFERRED_SIZE, 87, GroupLayout.PREFERRED_SIZE)
- .addGap(18)
- .addComponent(dabAmtO, GroupLayout.PREFERRED_SIZE, 87, GroupLayout.PREFERRED_SIZE))
- .addGroup(gl_contentPane.createSequentialGroup()
- .addGap(68)
- .addComponent(weedPotency, GroupLayout.PREFERRED_SIZE, 33, GroupLayout.PREFERRED_SIZE)
- .addPreferredGap(ComponentPlacement.RELATED)
- .addComponent(lblPercent1))
- .addGroup(gl_contentPane.createSequentialGroup()
- .addGap(44)
- .addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING)
- .addComponent(lblDabPotency, GroupLayout.PREFERRED_SIZE, 101, GroupLayout.PREFERRED_SIZE)
- .addComponent(lblWeedPotency)))
- .addGroup(gl_contentPane.createSequentialGroup()
- .addGap(67)
- .addComponent(dabPotency, GroupLayout.PREFERRED_SIZE, 33, GroupLayout.PREFERRED_SIZE)
- .addPreferredGap(ComponentPlacement.RELATED)
- .addComponent(labelPercent2, GroupLayout.PREFERRED_SIZE, 12, GroupLayout.PREFERRED_SIZE)))
- .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
- );
- gl_contentPane.setVerticalGroup(
- gl_contentPane.createParallelGroup(Alignment.LEADING)
- .addGroup(gl_contentPane.createSequentialGroup()
- .addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING)
- .addGroup(gl_contentPane.createSequentialGroup()
- .addComponent(lblWeedAmtG, GroupLayout.PREFERRED_SIZE, 16, GroupLayout.PREFERRED_SIZE)
- .addPreferredGap(ComponentPlacement.RELATED)
- .addComponent(weedAmtG, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
- .addGroup(gl_contentPane.createSequentialGroup()
- .addComponent(labelDabAmtG, GroupLayout.PREFERRED_SIZE, 16, GroupLayout.PREFERRED_SIZE)
- .addGap(6)
- .addComponent(dabAmtG, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)))
- .addPreferredGap(ComponentPlacement.RELATED)
- .addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE)
- .addComponent(lblWeedAmtO)
- .addComponent(lblDabAmtO))
- .addPreferredGap(ComponentPlacement.RELATED)
- .addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE)
- .addComponent(weedAmtO, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
- .addComponent(dabAmtO, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
- .addGap(25)
- .addComponent(lblWeedPotency)
- .addPreferredGap(ComponentPlacement.RELATED)
- .addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE)
- .addComponent(lblPercent1, GroupLayout.PREFERRED_SIZE, 20, GroupLayout.PREFERRED_SIZE)
- .addComponent(weedPotency, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
- .addPreferredGap(ComponentPlacement.UNRELATED)
- .addComponent(lblDabPotency)
- .addPreferredGap(ComponentPlacement.RELATED)
- .addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE)
- .addComponent(dabPotency, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
- .addComponent(labelPercent2, GroupLayout.PREFERRED_SIZE, 20, GroupLayout.PREFERRED_SIZE))
- .addContainerGap(46, Short.MAX_VALUE))
- );
- contentPane.setLayout(gl_contentPane);
- }
- public static void openNewGUI()
- {
- EventQueue.invokeLater(new Runnable()
- {
- public void run()
- {
- try
- {
- ReeferGUI frame = new ReeferGUI();
- frame.setVisible(true);
- }
- catch (Exception e)
- {
- e.printStackTrace();
- }
- }
- });
- }
- }
- class TextFieldListener implements KeyListener, MouseListener
- {
- private static ArrayList<JTextField> connectedFieldList = new ArrayList<>();
- private static ArrayList<JTextField> textFieldList = new ArrayList<>();
- private static JTextField currentlyEditingField;
- private static JTextField lastEditedConnectedField;
- private JTextField textField;
- static boolean firstRun = true;
- private static Timer timer = new Timer(500, new TimerListener());
- static
- {
- timer.start();
- }
- public TextFieldListener(JTextField field, boolean addToList)
- {
- textField = field;
- textFieldList.add(field);
- if (addToList)
- {
- if (firstRun) // Set the top left box (first one added to list) to the currently editing box
- {
- firstRun = false;
- currentlyEditingField = textField;
- }
- else // Set all text boxes to "--" besides the top left one
- {
- field.setText("--");
- }
- field.setHorizontalAlignment(JTextField.CENTER);
- connectedFieldList.add(field);
- }
- }
- @Override
- public void keyPressed(KeyEvent e) { }
- private void clearConnectedTextFields()
- {
- for (JTextField f : connectedFieldList)
- {
- if (f != null && !(f.equals(textField)))
- {
- f.setText("--");
- }
- }
- }
- @Override
- public void keyReleased(KeyEvent arg0) { }
- @Override
- public void keyTyped(KeyEvent e)
- {
- currentlyEditingField = textField;
- if (connectedFieldList.contains(textField))
- {
- lastEditedConnectedField = textField;
- clearConnectedTextFields();
- }
- }
- @Override
- public void mouseClicked(MouseEvent e)
- {
- textField.setText("");
- currentlyEditingField = textField;
- if (connectedFieldList.contains(textField))
- {
- lastEditedConnectedField = textField;
- clearConnectedTextFields();
- }
- }
- @Override
- public void mouseEntered(MouseEvent e) { }
- @Override
- public void mouseExited(MouseEvent e) { }
- @Override
- public void mousePressed(MouseEvent e) { }
- @Override
- public void mouseReleased(MouseEvent e) { }
- static class TimerListener implements ActionListener
- {
- @Override
- public void actionPerformed(ActionEvent e)
- {
- ping();
- }
- private void ping()
- {
- if (areAllFieldsValid()) // If all fields are valid numbers, perform calculations
- {
- int index = 0; // Figure out the index of the last edited text box because the calculations are based off of this index
- for (int i = 0; i < connectedFieldList.size(); i++)
- {
- if (connectedFieldList.get(i).equals(lastEditedConnectedField))
- {
- index = i;
- }
- }
- JTextField f = connectedFieldList.get(index);
- double weedPotency = Double.parseDouble(textFieldList.get(4).getText());
- double dabPotency = Double.parseDouble(textFieldList.get(5).getText());
- double weedToDabRatio = weedPotency / dabPotency;
- double dabToWeedRatio = dabPotency / weedPotency;
- DecimalFormat df = new DecimalFormat("#.##");
- double weedG = 0, dabG = 0, weedO = 0, dabO = 0;
- switch (index)
- {
- case 0: // CONDITION they edited the Weed Amount (g) field, so other values should be based off of this field
- weedG = Double.parseDouble(f.getText());
- weedO = weedG / 28.0;
- dabG = weedToDabRatio * weedG;
- dabO = weedToDabRatio * weedO;
- break;
- case 1: // CONDITION they edited the Dab Amount (g) field, so other values should be based off of this field
- dabG = Double.parseDouble(f.getText());
- dabO = dabG / 28.0;
- weedG = dabToWeedRatio * dabG;
- weedO = weedG / 28.0;
- break;
- case 2: // CONDITION they edited the Weed Amount (O) field, so other values should be based off of this field
- weedO = Double.parseDouble(f.getText());
- weedG = weedO * 28.0;
- dabG = weedToDabRatio * weedG;
- dabO = weedToDabRatio * weedO;
- break;
- case 3: // CONDITION they edited the Dab Amount (O) field, so other values should be based off of this field
- dabO = Double.parseDouble(f.getText());
- dabG = dabG * 28.0;
- weedG = dabToWeedRatio * dabG;
- weedO = weedG / 28.0;
- break;
- }
- connectedFieldList.get(0).setText(df.format(weedG));
- connectedFieldList.get(1).setText(df.format(dabG));
- connectedFieldList.get(2).setText(df.format(weedO));
- connectedFieldList.get(3).setText(df.format(dabO));
- }
- }
- private boolean areAllFieldsValid()
- {
- boolean valid = true;
- int numBlankFields = 0;
- for (JTextField f : textFieldList)
- {
- try
- {
- Double.parseDouble(f.getText());
- }
- catch (Exception e)
- {
- if (!(f.getText().equals("--")))
- {
- valid = false;
- if (!(f.equals(currentlyEditingField))) // Don't change the text to #NAN if the user is currently editing it
- {
- f.setText("#NAN");
- }
- }
- else
- {
- numBlankFields++;
- }
- }
- }
- if (numBlankFields > 3) // If all 4 fields are blank it can't be valid
- {
- valid = false;
- }
- return valid;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement