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

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

Сообщение Anonymous »

У меня проблема. Я создал небольшой графический интерфейс в Swing, который должен представлять собой калькулятор.
Я хочу, чтобы, если пользователь вводит в текстовое поле 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»