/*Werte von Buff zu Cs.deals umrechnen (Und umgedreht je nachdem was per Dropdown menü ausgewählt ist)
Einmal Prozentwert und einmal Gewinn pro verkaufter Einheit ausrechnen (Bei mehreren Einheiten sollen auch mehrere einheiten per texteld aufgenommen und gewinn für alle ausgerechnet werden).
*/
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class CsUmrechner extends JFrame {
//labels
JLabel label_price_csdeals,label_price_buff,label_procent,label_profit,label_sellonbuff,label_selloncsdeals;
//Eingabefelder
JTextField insert_price_csdeals,insert_price_buff;
//Ausgabefelder
JTextArea output_procent,output_profit;
//Button "berechnen" zum auslösen des actionevents
JButton button_berechnen;
//Checkboxen um zu prüfen ob item auf csdeals oder buff verkauft wird (Um Kommission 1% csdeals oder 1.8% buff zu bestimmen).
JCheckBox checkbox_sellonbuff;
JCheckBox checkbox_selloncsdeals;
public class ButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
double price_csdeals,price_buff;
String procent_output;
String profit_output;
double procent_buff_to_csdeals,profit_unit;
boolean disable_profit_output= false;
try {
price_csdeals = Double.parseDouble(insert_price_csdeals.getText());
price_buff = Double.parseDouble(insert_price_buff.getText());
}
catch (NumberFormatException nfe) {
output_procent.setText("Error please insert number");
output_profit.setText("Error please insert number");
return;
}
if (checkbox_sellonbuff.isSelected() && !checkbox_selloncsdeals.isSelected()) {
procent_buff_to_csdeals = getProcentBuffToCsdeals(price_buff, price_csdeals,false);
//Profit Output Feld wird bei Verkauf auf Buff nicht benötigt
disable_profit_output=true;
profit_unit=0;
}
else if (checkbox_selloncsdeals.isSelected() && !checkbox_sellonbuff.isSelected()) {
procent_buff_to_csdeals = getProcentBuffToCsdeals(price_buff, price_csdeals,true);
profit_unit = getProfitPerUnit(price_buff, price_csdeals);
disable_profit_output=false;
}
else {
//Initialisierung weil compiler sonst meckert
procent_buff_to_csdeals= 0;
profit_unit=0;
//Fehler ausgeben
output_procent.setText("Error pls select one checkbox");
output_profit.setText("Error pls select one checkbox");
return;
}
try {
procent_output = String.valueOf(procent_buff_to_csdeals);
profit_output = String.valueOf(profit_unit);
} catch (Exception st_convert) {
output_procent.setText("Internal error while converting double to String");
output_profit.setText("Internal error while converting double to String");
return;
}
output_procent.setText(procent_output);
if(!disable_profit_output) {
output_profit.setText(profit_output);
}
else {
output_profit.setText("/");
}
}
}
/*class TextfieldListener implements ActionListener {
//Hier die Funktionen zur Umrechnung, Prozentrechnung etc. implementieren
@Override
public void actionPerformed(ActionEvent e) {
//Listener um Enter Eingabe des JTextfields abzufangen, wird aber nicht benötigt da erstmal ein Button "Rechnen" zum auslösen des events verwendet wird
String action_command;
action_command=e.getActionCommand();
if (action_command.equals("csdeals_price")) {
String price_csdeals = insert_price_csdeals.getText();
//output_procent.append(price_csdeals);
}
else if(action_command.equals("buff_price")) {
String buff_price = insert_price_buff.getText();
//output_procent.setText(buff_price);
}
//Hier die Funktionen zur Umrechnung, Prozentrechnung etc. ausführen und die Werte der JLabels anschließend unpassen zur Ausgabe der Werte
}
}
*/
CsUmrechner(String title) {
super(title);
button_berechnen = new JButton("calculate");
//Alle Labels fürs Programm instanzieren
label_price_csdeals = new JLabel("Price Cs.deals:");
label_price_buff = new JLabel("Price Buff163:");
label_procent = new JLabel(" %Buff/Cs.deals price:");
label_profit = new JLabel ("Profit $ per unit:");
//Alignment für die labels auf Center setzen, damit diese mittig angezeigt werden
label_price_csdeals.setHorizontalAlignment(SwingConstants.CENTER);
label_profit.setHorizontalAlignment(SwingConstants.CENTER);
label_price_buff.setHorizontalAlignment(SwingConstants.CENTER);
label_procent.setHorizontalAlignment(SwingConstants.CENTER);
// label_sellonbuff = new JLabel("Sell item on Buff");
//label_selloncsdeals = new JLabel("Sell item on csdeals");
//Alle Eingabefelder fürs Programm instanzieren
insert_price_csdeals = new JTextField(5); //colum größe 5 ist egal,wird eh durch layout manager überschrieben
insert_price_buff = new JTextField(5);
/*
//Für JTextfield müssen ActionCommands selber definiert werden damit man diese im Action Listener abfangen kann aktuell auskommentiert, da ein Button für events genutzt wird.
insert_price_csdeals.setActionCommand("csdeals_price");
insert_price_buff.setActionCommand("buff_price");
*/
//Alle Ausgabefelder instanzieren
output_procent = new JTextArea(1,1);
output_profit = new JTextArea();
//User soll in text Ausgabefeldern selbst keine Eingaben tätigen können
output_procent.setEditable(false);
output_profit.setEditable(false);
//Checkboxen instanzieren
checkbox_sellonbuff = new JCheckBox("Sell item on buff",false);
checkbox_selloncsdeals = new JCheckBox(" Sell item on csdeals",true);
checkbox_selloncsdeals.setHorizontalAlignment(SwingConstants.CENTER);
checkbox_sellonbuff.setHorizontalAlignment(SwingConstants.CENTER);
//ButtonGroup erstellen und beide checkboxen registrieren, dies bewirkt, dass immer nur eine Checkbox gleichzeitig angehakt sein kann
ButtonGroup checkbox_group = new ButtonGroup();
checkbox_group.add(checkbox_sellonbuff);
checkbox_group.add(checkbox_selloncsdeals);
//Layout fürs Main Fenster definieren
setLayout(new GridLayout(4,0,0,25));
//Panels zur Aufnahme der In/Out Felder instanzieren
JPanel panel_button =new JPanel();
JPanel panel_insert =new JPanel();
JPanel panel_output= new JPanel();
JPanel panel_checkboxes = new JPanel();
//Layout Manager für Panels definieren, später nochmal mit gridbaglayout versuchen um textfelder kleiner zu machen, war mir nur grad etwas zu komplex
panel_button.setLayout(new GridLayout(0,1,0,2));
panel_insert.setLayout(new GridLayout(0,2,0,2));
panel_output.setLayout(new GridLayout(0,2,0,5));
panel_checkboxes.setLayout(new GridLayout(0,2,0,0));
//Labels und Textfelder dem ersten Panel zuordnen
panel_insert.add(label_price_csdeals);
panel_insert.add(insert_price_csdeals);
panel_insert.add(label_price_buff);
panel_insert.add(insert_price_buff);
//Labels und Textfelder dem zweiten Label zuordnen
panel_output.add(label_procent);
panel_output.add(output_procent);
panel_output.add(label_profit);
panel_output.add(output_profit);
//Button(s) dem ButtonPanel hinzufügen
panel_button.add(button_berechnen);
//Checkboxen dem PanelCheckbox hinzufügen
panel_checkboxes.add(checkbox_selloncsdeals);
panel_checkboxes.add(checkbox_sellonbuff);
//Panels dem Main Window hinzufügen
add(panel_insert);
add(panel_checkboxes);
add(panel_button);
add(panel_output);
//Listener für button instanzieren und gleichzeitig registrieren
button_berechnen.addActionListener(new ButtonListener() );
/*
//Wird benötigt, wenn ActionListener (Enter) der JTextfields genutzt werden soll, aktuell wird aber nur der Listener des Button benutzt
TextfieldListener insertlistener= new TextfieldListener();
insert_price_buff.addActionListener(insertlistener);
insert_price_csdeals.addActionListener(insertlistener);
*/
//default close operation fürs main window(Schließen und Prog beenden)
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
} //Ende Konstruktur der abgeleiteten JFrame Klasse
private double getProcentBuffToCsdeals(double price_buff,double price_csdeals,boolean sell_on_csdeals) {
double result;
//Wenn auf Csdeals verkauft wird 1% comission
if (sell_on_csdeals) {
return result = price_buff / (price_csdeals*0.99);
}
//Wenn auf Buff verkauft wird 1.8% comission für dota2 items
else {
return result = (price_buff*0.982) / price_csdeals;
}
}
private double getProfitPerUnit(double price_buff, double price_csdeals) {
//Profit von auf buff gekaufter und auf csdeals verkaufter einheit
//Es wird hier als standard Cashin Wert auf Buff 0.945% angenommen (Üblicher Preisverlust bei kauf von arcs auf csdeals und verkauf auf Buff in usd)
double result;
final double buff_cash_in = 0.945;
return result = (price_csdeals*0.99) - (price_buff / buff_cash_in); //Bedeutet verkaufspreis/ buff cash in Preis (den man auf csdeals fürs cash in bei buff zahlt) (Also den Gewinn den man erhält)
}
private double getProfitPerUnit(double price_buff,double price_csdeals,final double procent_buff_cash_in) {
//Funktion für später, wenn man den Prozentwert zum Cash In auf Buff selber per Textfield angeben will
double result;
return result = (price_csdeals*0.99) - (price_buff / procent_buff_cash_in);
}
public static void main(String[] args) {
CsUmrechner mainwindow= new CsUmrechner("CS Umrechner");
mainwindow.pack();
mainwindow.setSize(300,300);
mainwindow.setVisible(true);
}
}