Add src/main/java/dev/sillyangel/calc/BaseConverter.java
Some checks failed
Build the Jar / build (push) Failing after 20s
Some checks failed
Build the Jar / build (push) Failing after 20s
This commit is contained in:
110
src/main/java/dev/sillyangel/calc/BaseConverter.java
Normal file
110
src/main/java/dev/sillyangel/calc/BaseConverter.java
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
package dev.sillyangel.calc;
|
||||||
|
|
||||||
|
import java.awt.BorderLayout;
|
||||||
|
import java.awt.FlowLayout;
|
||||||
|
import java.awt.GridLayout;
|
||||||
|
import java.awt.event.ActionEvent;
|
||||||
|
import java.awt.event.ActionListener;
|
||||||
|
import javax.swing.JButton;
|
||||||
|
import javax.swing.JComboBox;
|
||||||
|
import javax.swing.JDialog;
|
||||||
|
import javax.swing.JLabel;
|
||||||
|
import javax.swing.JOptionPane;
|
||||||
|
import javax.swing.JPanel;
|
||||||
|
import javax.swing.JTextField;
|
||||||
|
import javax.swing.border.EmptyBorder;
|
||||||
|
|
||||||
|
public class BaseConverter {
|
||||||
|
private Calculator ci;
|
||||||
|
private JDialog BaseConverterDialog;
|
||||||
|
private JTextField inputField;
|
||||||
|
private JComboBox<String> fromBaseComboBox;
|
||||||
|
private JComboBox<String> toBaseComboBox;
|
||||||
|
private JLabel resultLabel;
|
||||||
|
|
||||||
|
public BaseConverter(Calculator ci) {
|
||||||
|
System.out.println("Initialized BaseConverter");
|
||||||
|
this.ci = ci;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void BaseConverterGUI() {
|
||||||
|
BaseConverterDialog = new JDialog(this.ci, "Base System Converter");
|
||||||
|
BaseConverterDialog.setSize(400, 250);
|
||||||
|
BaseConverterDialog.setLocationRelativeTo(this.ci);
|
||||||
|
BaseConverterDialog.setLayout(new BorderLayout(10, 10));
|
||||||
|
|
||||||
|
|
||||||
|
JPanel inputPanel = new JPanel();
|
||||||
|
inputPanel.setBorder(new EmptyBorder(10, 10, 10, 10));
|
||||||
|
inputPanel.setLayout(new GridLayout(0, 2, 10, 10));
|
||||||
|
|
||||||
|
inputPanel.add(new JLabel("Input Number:"));
|
||||||
|
inputField = new JTextField(20);
|
||||||
|
inputPanel.add(inputField);
|
||||||
|
|
||||||
|
String[] bases = {"Binary (2)", "Octal (8)", "Decimal (10)", "Hexadecimal (16)"};
|
||||||
|
inputPanel.add(new JLabel("From Base:"));
|
||||||
|
fromBaseComboBox = new JComboBox<>(bases);
|
||||||
|
inputPanel.add(fromBaseComboBox);
|
||||||
|
|
||||||
|
inputPanel.add(new JLabel("To Base:"));
|
||||||
|
toBaseComboBox = new JComboBox<>(bases);
|
||||||
|
toBaseComboBox.setSelectedIndex(2);
|
||||||
|
inputPanel.add(toBaseComboBox);
|
||||||
|
|
||||||
|
BaseConverterDialog.add(inputPanel, BorderLayout.CENTER);
|
||||||
|
|
||||||
|
|
||||||
|
JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
|
||||||
|
JButton convertButton = new JButton("Convert");
|
||||||
|
convertButton.addActionListener(new ActionListener() {
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
convert();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
buttonPanel.add(convertButton);
|
||||||
|
BaseConverterDialog.add(buttonPanel, BorderLayout.SOUTH);
|
||||||
|
|
||||||
|
// --- Result Panel ---
|
||||||
|
JPanel resultPanel = new JPanel();
|
||||||
|
resultPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
|
||||||
|
resultPanel.add(new JLabel("Result:"));
|
||||||
|
resultLabel = new JLabel("0");
|
||||||
|
resultPanel.add(resultLabel);
|
||||||
|
BaseConverterDialog.add(resultPanel, BorderLayout.NORTH);
|
||||||
|
BaseConverterDialog.setVisible(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void convert() {
|
||||||
|
String input = inputField.getText().trim();
|
||||||
|
if (input.isEmpty()) {
|
||||||
|
JOptionPane.showMessageDialog(BaseConverterDialog, "Please enter a number.", "Error", JOptionPane.ERROR_MESSAGE);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int fromBase = getBaseFromComboBox(fromBaseComboBox);
|
||||||
|
int toBase = getBaseFromComboBox(toBaseComboBox);
|
||||||
|
|
||||||
|
try {
|
||||||
|
// 1. Convert from source base string to a standard long
|
||||||
|
long decimalValue = Long.parseLong(input, fromBase);
|
||||||
|
|
||||||
|
// 2. Convert from the standard long to the target base string
|
||||||
|
String result = Long.toString(decimalValue, toBase).toUpperCase();
|
||||||
|
|
||||||
|
resultLabel.setText(result);
|
||||||
|
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
JOptionPane.showMessageDialog(BaseConverterDialog, "Invalid input for the selected 'From Base'. Please check your number.", "Error", JOptionPane.ERROR_MESSAGE);
|
||||||
|
} catch (Exception e) {
|
||||||
|
JOptionPane.showMessageDialog(BaseConverterDialog, "An unexpected error occurred: " + e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private int getBaseFromComboBox(JComboBox<String> comboBox) {
|
||||||
|
String selected = (String) comboBox.getSelectedItem();
|
||||||
|
// Extract the number from the string e.g., "Binary (2)" -> 2
|
||||||
|
return Integer.parseInt(selected.replaceAll("[^0-9]", ""));
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user