Ключевой прослушиватель в Java SwingJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Ключевой прослушиватель в Java Swing

Сообщение Anonymous »

У меня проблема: я создал небольшой графический интерфейс, который должен быть калькулятором.
Я хочу, чтобы, если пользователь вводит в текстовое поле A число, а в текстовое поле B другое, должен быть прослушиватель, который, если пользователь вводит оператор (+ - / *), он должен выполнить операцию с обоими числами, теперь у меня проблема, оператор будет показан в текстовом поле, что он не должен делать, как я могу это исправить? .
код ниже:
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JTextField;
import javax.swing.JLabel;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

public class Taschenrechner extends JFrame {

private static final long serialVersionUID = 1L;
private JPanel contentPane;
private JTextField textB;
private JTextField textA;
private JTextField textErgebnis;

/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Taschenrechner frame = new Taschenrechner();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}

/**
* Create the frame.
*/
public Taschenrechner() {
setTitle("Taschenrechner");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 500);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));

setContentPane(contentPane);
contentPane.setLayout(null);

textB = new JTextField();
textB.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
loeschenString(textB);
}
});
textB.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent a) {
if(a.getKeyChar() == '+') {
addieren();
a.consume(); // Prevent the symbol from appearing in the text field
} else if(a.getKeyChar() == '-') {
subtrahieren();
a.consume();
} else if(a.getKeyChar() == '*') {
multiplizieren();
a.consume();
} else if(a.getKeyChar() == '/') {
dividieren();
a.consume();
}
}

});
textB.setText("0");
textB.setBounds(233, 40, 179, 20);
contentPane.add(textB);
textB.setColumns(10);

JLabel lblZahlA = new JLabel("Zahl A");
lblZahlA.setBounds(93, 15, 46, 14);
contentPane.add(lblZahlA);

JLabel lblZahlB = new JLabel("Zahl B");
lblZahlB.setBounds(291, 15, 46, 14);
contentPane.add(lblZahlB);

JButton btnSubtstraktion = new JButton("A - B");
btnSubtstraktion.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
subtrahieren();
}
});
btnSubtstraktion.setBounds(233, 94, 179, 23);
contentPane.add(btnSubtstraktion);

textA = new JTextField() ;
textA.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {

loeschenString(textA);

}
});
textA.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent a) {
if(a.getKeyChar() == '+') {
addieren();
a.consume();
} else if(a.getKeyChar() == '-') {
subtrahieren();
a.consume();
} else if(a.getKeyChar() == '*') {
multiplizieren();
a.consume();
} else if(a.getKeyChar() == '/') {
dividieren();
a.consume();
}
}
});
textA.setText("0");
textA.setColumns(10);
textA.setBounds(20, 40, 179, 20);
contentPane.add(textA);

JButton btnAddition = new JButton("A + B");
btnAddition.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
addieren();
}
});
btnAddition.setBounds(20, 94, 179, 23);
contentPane.add(btnAddition);

JButton btnMultiplikation = new JButton("A * B");
btnMultiplikation.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
multiplizieren();
}
});
btnMultiplikation.setBounds(20, 159, 179, 23);
contentPane.add(btnMultiplikation);

JButton btnDivision = new JButton("A / B");
btnDivision.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
dividieren();
}
});
btnDivision.setBounds(233, 159, 179, 23);
contentPane.add(btnDivision);

JLabel lblErgebnis = new JLabel("Ergebnis");
lblErgebnis.setBounds(171, 270, 71, 14);
contentPane.add(lblErgebnis);

textErgebnis = new JTextField();
textErgebnis.setEditable(false);
textErgebnis.setColumns(10);
textErgebnis.setBounds(122, 310, 179, 20);
contentPane.add(textErgebnis);
}

private void addieren() {
int a = Integer.parseInt(textA.getText());
int b = Integer.parseInt(textB.getText());
int addieren = a+b;
textErgebnis.setText(""+addieren);
};
private void subtrahieren() {
int a = Integer.parseInt(textA.getText());
int b = Integer.parseInt(textB.getText());
int Subtrahieren = a-b;
textErgebnis.setText(""+Subtrahieren);
};
private void multiplizieren() {
int a = Integer.parseInt(textA.getText());
int b = Integer.parseInt(textB.getText());
int Multiplizieren = a*b;
textErgebnis.setText(""+Multiplizieren);
};
private void dividieren() {
double a = Double.parseDouble(textA.getText());
double b = Double.parseDouble(textB.getText());
double Dividieren = a/b;
textErgebnis.setText(""+Dividieren);
};

private void loeschenString(JTextField textField) {
String eingabe = textField.getText();
if (eingabe.endsWith("+") || eingabe.endsWith("-") || eingabe.endsWith("*") || eingabe.endsWith("/")) {
textField.setText(eingabe.substring(0, eingabe.length() - 1));
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/790 ... java-swing
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»