Мне необходимо проверить правильность заполнения текстовых полей в созданном JFrame. В этих полях должны быть только цифры и знак минус.
Пытался написать алгоритм с использованием функции getKeyChar()
. Но она не определяется в классе NewJFrame
даже после написания в начале программы таких строк:
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
Как можно реализовать ввод именно числовых значений (в том числе и отрицательных) в текстовых полях с дальнейшим использованием этих значений в вычислениях?
Исходный код (без обработки случаев неправильного ввода):
public class NewJFrame extends javax.swing.JFrame {
public NewJFrame() {
initComponents();
}private void cActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}
private void aActionPerformed(java.awt.event.ActionEvent evt) {
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
double a,b,c,x;
a = Double.parseDouble(this.a.getText());
b = Double.parseDouble(this.b.getText());
c = Double.parseDouble(this.c.getText());
x = Double.parseDouble(this.x.getText());
double y = (Math.pow(a,2)+Math.pow(x, 2)*Math.pow(2.71,-b+Math.pow(x,3)))/(Math.sin(c*x)+4.79);
this.y.setText(Double.toString(y));
}
private void xActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}
// Variables declaration - do not modify
private javax.swing.JTextField a;
private javax.swing.JTextField b;
private javax.swing.JTextField c;
private javax.swing.JButton jButton1;
private javax.swing.JDesktopPane jDesktopPane1;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JSpinner jSpinner1;
private javax.swing.JTextField x;
private javax.swing.JTextField y;
// End of variables declaration
}
Некоторые шаблонные блоки кода я не стал копировать.
Подправьте просто regex как вам надо, я думаю это, что вам надо.
import java.awt.BorderLayout;
import java.util.regex.Pattern;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
import javax.swing.text.PlainDocument;
@SuppressWarnings("serial")
public class JavaRanch extends JPanel
{
private JLabel inputLabel;
private NumericTextField inputField;
public JavaRanch()
{
super(new BorderLayout());
inputLabel = new JLabel("Enter value: ");
inputField = new NumericTextField();
inputField.setColumns(10);
this.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
this.add(inputLabel, BorderLayout.WEST);
this.add(inputField, BorderLayout.CENTER);
}
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
try
{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
JFrame frame = new JFrame("Numeric Text Field Demo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new JavaRanch());
frame.pack();
frame.setVisible(true);
}
catch (Exception e)
{
e.printStackTrace();
}
}
});
}
}
@SuppressWarnings("serial")
class NumericTextField extends JTextField
{
@Override
protected Document createDefaultModel()
{
return new NumericDocument();
}
private static class NumericDocument extends PlainDocument
{
// The regular expression to match input against (zero or more digits)
private final static Pattern DIGITS = Pattern.compile("\\d*");
@Override
public void insertString(int offs, String str, AttributeSet a) throws BadLocationException
{
// Only insert the text if it matches the regular expression
if (str != null && DIGITS.matcher(str).matches())
super.insertString(offs, str, a);
}
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Сделал таблички: Магазин(Shop) Товар(Item) Табличка связи(item_x_shop)
проблема заключается в том что при считывании данных с клавиатуры с помощью методов класса Scanner, он пропускает строки (Date и Notes)Насколько я понял...