Hi,
ich möchte einen Bruchrechner programmieren meine Gui und die Logik für das Plus rechnen stehen schon. Ich hab nur 2 Probleme. Problem 1: beim Löschen der Eingabe wird aus einem Textfeld nichts rausgelöscht, dazu meine Frage: Was habe ich da Falsch gemacht? Problem 2: beim plus rechnen mit 2 unterschiedlichen Nennern kommt die Fehlermeldung: java.lang.OutOfMemoryError, hierzu meine Frage Wie kommst dazu und wie kann ich es beheben??
hier noch mein Code
ich möchte einen Bruchrechner programmieren meine Gui und die Logik für das Plus rechnen stehen schon. Ich hab nur 2 Probleme. Problem 1: beim Löschen der Eingabe wird aus einem Textfeld nichts rausgelöscht, dazu meine Frage: Was habe ich da Falsch gemacht? Problem 2: beim plus rechnen mit 2 unterschiedlichen Nennern kommt die Fehlermeldung: java.lang.OutOfMemoryError, hierzu meine Frage Wie kommst dazu und wie kann ich es beheben??
hier noch mein Code
Java:
package RunProject;
import Core.Listener;
import Gui.MainFrame;
public class ShowGui {
public static void main(String[] args) {
MainFrame frame = new MainFrame();
frame.showFrame();
Listener listener = new Listener(frame);
listener.getAction();
}
}
Java:
package Gui;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.text.NumberFormat;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.Border;
import javax.swing.text.NumberFormatter;
public class MainFrame extends JFrame{
public JPanel eingabeContainer;
public JPanel eingabeController;
public JPanel bruch1;
public JPanel operator;
public JPanel bruch2;
public JPanel panelIstGleich;
public JPanel ergebnis;
public JPanel buttonsContainer;
public JPanel operatoren;
public JPanel panelClear;
public JButton buttonPlus;
public JButton buttonMinus;
public JButton buttonMal;
public JButton buttonGeteilt;
public JButton buttonClear;
public JButton buttonIstgleich;
public JFormattedTextField zähler1;
public JFormattedTextField nenner1;
public JFormattedTextField zähler2;
public JFormattedTextField nenner2;
public JLabel zählerErgebnis;
public JLabel nennerErgebnis;
public JLabel operatorLabel;
public JLabel labelIstGleich;
public MainFrame(){
this.setTitle("Bruchrechner");
this.setSize(450,200);
this.setLayout(new BorderLayout());
NumberFormat format = NumberFormat.getInstance();
format.setGroupingUsed(false);
NumberFormatter formatter = new NumberFormatter(format);
formatter.setAllowsInvalid(false);
Border border = BorderFactory.createLineBorder(Color.BLACK, 1);
eingabeContainer = new JPanel();
eingabeController = new JPanel();
eingabeController.setLayout(new GridLayout(1,5));
bruch1 = new JPanel();
bruch1.setLayout(new GridLayout(2,1,2,2));
zähler1 = new JFormattedTextField(formatter);
nenner1 = new JFormattedTextField(formatter);
zähler1.setColumns(5);
nenner1.setColumns(5);
zähler1.setBorder(border);
nenner1.setBorder(border);
bruch1.add(zähler1);
bruch1.add(nenner1);
bruch2 = new JPanel();
bruch2.setLayout(new GridLayout(2,1,2,2));
zähler2 = new JFormattedTextField(formatter);
nenner2 = new JFormattedTextField(formatter);
zähler2.setColumns(5);
nenner2.setColumns(5);
zähler2.setBorder(border);
nenner2.setBorder(border);
bruch2.add(zähler2);
bruch2.add(nenner2);
operator = new JPanel();
operatorLabel = new JLabel();
operator.add(operatorLabel);
panelIstGleich = new JPanel();
labelIstGleich = new JLabel("=");
panelIstGleich.add(labelIstGleich);
ergebnis = new JPanel();
ergebnis.setLayout(new GridLayout(2,1,2,2));
nennerErgebnis = new JLabel();
zählerErgebnis = new JLabel();
nennerErgebnis.setBackground(Color.WHITE);
nennerErgebnis.setOpaque(true);
nennerErgebnis.setBorder(border);
zählerErgebnis.setBackground(Color.WHITE);
zählerErgebnis.setOpaque(true);
zählerErgebnis.setBorder(border);
ergebnis.add(zählerErgebnis);
ergebnis.add(nennerErgebnis);
eingabeController.add(bruch1);
eingabeController.add(operator);
eingabeController.add(bruch2);
eingabeController.add(panelIstGleich);
eingabeController.add(ergebnis);
eingabeContainer.add(eingabeController);
buttonsContainer = new JPanel();
operatoren = new JPanel();
operatoren.setLayout(new GridLayout(2,2,5,5));
buttonPlus = new JButton("+");
buttonMinus = new JButton("-");
buttonMal = new JButton("*");
buttonGeteilt = new JButton("/");
operatoren.add(buttonPlus);
operatoren.add(buttonMinus);
operatoren.add(buttonMal);
operatoren.add(buttonGeteilt);
buttonsContainer.add(operatoren);
panelClear = new JPanel();
buttonClear = new JButton("C");
buttonIstgleich = new JButton("=");
panelClear.add(buttonClear);
panelClear.add(buttonIstgleich);
buttonsContainer.add(operatoren);
buttonsContainer.add(panelClear);
this.add(buttonsContainer, BorderLayout.SOUTH);
this.add(eingabeContainer, BorderLayout.CENTER);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public void showFrame(){
this.setVisible(true);
}
}
Java:
package Core;
import java.util.ArrayList;
public class Rechner {
ArrayList<Integer> zahlen = new ArrayList<Integer>();
public ArrayList<Integer> plus(int nenner1, int zähler1, int nenner2, int zähler2) {
int nenner, zähler;
if(nenner1 == nenner2){
zähler = zähler1 + zähler2;
zahlen.add(nenner1);
zahlen.add(zähler);
}else{
int counter = 1;
double nenner1Rest, nenner2Rest;
boolean statusNenner1 = false;
boolean statusNenner2 = false;
boolean next = false;
do{
nenner1Rest = nenner1 % counter;
nenner2Rest = nenner2 % counter;
if(nenner1Rest == 0){
statusNenner1 = true;
}
if(nenner2Rest == 0){
statusNenner2 = true;
}
if(statusNenner1 == true && statusNenner2 == true){
int faktorNenner1, faktorNenner2, neuerZähler1, neuerZähler2, neuerNenner1;
neuerNenner1 = counter;
faktorNenner1 = counter / zähler1;
faktorNenner2 = counter / zähler2;
neuerZähler1 = faktorNenner1 * zähler1;
neuerZähler2 = faktorNenner2 * zähler2;
zähler = neuerZähler1 + neuerZähler2;
zahlen.add(neuerNenner1);
zahlen.add(zähler);
}else{
statusNenner1 = false;
statusNenner2 = false;
}
counter ++;
}while(next == false);
}
return zahlen;
}
public ArrayList<Integer> minus(int nenner1, int zähler1, int nenner2, int zähler2) {
return zahlen;
}
public ArrayList<Integer> mal(int nenner1, int zähler1, int nenner2, int zähler2) {
return zahlen;
}
public ArrayList<Integer> geteilt(int nenner1, int zähler1, int nenner2, int zähler2) {
return zahlen;
}
}
Java:
package Core;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import Gui.MainFrame;
public class Listener<E> {
MainFrame frame;
Rechner rechner = new Rechner();
int nenner1 = 0;
int nenner2 = 0;
int zähler1 = 0;
int zähler2 = 0;
ArrayList<Integer> zahlen;
String nenner;
String zähler;
public Listener(MainFrame frame) {
this.frame = frame;
}
public void getAction() {
frame.buttonPlus.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
frame.operatorLabel.setText("+");
}
});
frame.buttonMinus.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
frame.operatorLabel.setText("-");
}
});
frame.buttonMal.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
frame.operatorLabel.setText("*");
}
});
frame.buttonGeteilt.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
frame.operatorLabel.setText("/");
}
});
frame.buttonIstgleich.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
String sOperator;
try {
nenner1 = Integer.parseInt(frame.nenner1.getText());
} catch (NumberFormatException e) {
System.err.println(
"Fehler bei Methode getAction in Klasse Listener Ursache: Fehler beim parsen von nenner1");
}
try {
nenner2 = Integer.parseInt(frame.nenner2.getText());
} catch (NumberFormatException e) {
System.err.println(
"Fehler bei Methode getAction in Klasse Listener Ursache: Fehler beim parsen von nenner2");
}
try {
zähler1 = Integer.parseInt(frame.zähler1.getText());
} catch (NumberFormatException e) {
System.err.println(
"Fehler bei Methode getAction in Klasse Listener Ursache: Fehler beim parsen von zähler1");
}
try {
zähler2 = Integer.parseInt(frame.zähler2.getText());
} catch (NumberFormatException e) {
System.err.println(
"Fehler bei Methode getAction in Klasse Listener Ursache: Fehler beim parsen von zähler2");
}
sOperator = frame.operatorLabel.getText();
if (sOperator.equals("+")) {
zahlen = (ArrayList<Integer>) rechner.plus(nenner1, zähler1, nenner2, zähler2);
nenner = String.valueOf(zahlen.get(0));
zähler = String.valueOf(zahlen.get(1));
frame.nennerErgebnis.setText(nenner);
frame.zählerErgebnis.setText(zähler);
}
if (sOperator.equals("-")) {
zahlen = (ArrayList<Integer>) rechner.minus(nenner1, zähler1, nenner2, zähler2);
nenner = String.valueOf(zahlen.get(0));
zähler = String.valueOf(zahlen.get(1));
frame.nennerErgebnis.setText(nenner);
frame.zählerErgebnis.setText(zähler);
}
}
});
frame.buttonClear.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
frame.nenner1.setText(null);
frame.nenner2.setText(null);
frame.zähler1.setText(null);
frame.zähler2.setText(null);
frame.zählerErgebnis.setText(null);
frame.nennerErgebnis.setText(null);
frame.operatorLabel.setText(null);
}
});
}
}
Zuletzt bearbeitet von einem Moderator: