Witam mam kod programu, działa lecz jest mały problem odnośnie sprawdzania danych wprowadzanych do pola TextField
oto kod:
package bryly;
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.*;
public class bryly {
/**
* @param args
* the command line arguments
*/
public static void main(String[] args) {
oknoglowne oknopr = new oknoglowne();
}
private static class oknoglowne {
String lista1[] = { "", "Czworościan", "Prostopadłościan", "Kula",
"Stożek" };
JComboBox Jlista;
JTextField pole1, pole2, pole3;
JLabel tpole1, tpole2, tpole3, tpole4, tpole5, wpole1, wpole2;
public oknoglowne()
{
JFrame okno = new JFrame("Bryłki");
okno.setResizable(false);
okno.setSize(500, 400);
okno.setLocationByPlatform(true);
okno.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
panel.setLayout(null);
//zmiana koloru okna głównego
panel.setBackground(Color.white);
// dodanie JComboBox z listą elementów
Jlista = new JComboBox(lista1);
Jlista.setBounds(50, 15, 200, 25);
//zmiana koloru listy tla combobox
Jlista.setBackground(Color.green);
JButton klik = new JButton("Obliczaj");
klik.setBounds(50, 200, 200, 35);
klik.setVisible(true);
//zmiana koloru przycisku obliczaj
klik.setBackground(Color.orange);
// dodanie JLabel do opisywania tekstów
tpole1 = new JLabel("Tu podajemy dane");
tpole1.setBounds(20, 50, 200, 25);
tpole2 = new JLabel("Tu podajemy dane ");
tpole2.setBounds(20, 75, 200, 25);
tpole3 = new JLabel("Tu podajemy dane ");
tpole3.setBounds(20, 100, 200, 25);
tpole4 = new JLabel(
"Wykonał : Kamil Barcikowski ");
tpole4.setBounds(10, 50, 600, 525);
// dodanie JLabel do opisywania tekstów
wpole1 = new JLabel("");
wpole1.setBounds(20, 125, 300, 45);
wpole2 = new JLabel("");
wpole2.setBounds(20, 150, 300, 45);
// dodanie JTextFiled okienka do wprowadzania danych
pole1 = new JTextField("");
pole1.setBounds(255, 50, 100, 25);
//zmiana koloru pola wpisywania danych
pole1.setBackground(Color.yellow);
pole2 = new JTextField("");
pole2.setBounds(255, 75, 100, 25);
pole2.setBackground(Color.yellow);
pole3 = new JTextField("");
pole3.setBounds(255, 100, 100, 25);
pole3.setBackground(Color.yellow);
// nasłuchiwanie listy JComboBox
Jlista.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int nr_lista1 = Jlista.getSelectedIndex();
switch (nr_lista1) {
case 0:// pierwsza figura
wpole1.setText("Wybierz figurę!!!");
pole1.setText("");
pole2.setText("");
pole3.setText("");
pole3.setVisible(false);
pole2.setVisible(false);
pole1.setVisible(false);
tpole1.setText("");
tpole2.setText("");
tpole3.setText("");
wpole2.setText("");
break;
case 1:// pierwsza figura
pole1.setText("");
wpole1.setText("Pole całkowite =");
wpole2.setText("Objętość = ");
tpole1.setText("Długość boku a =");
tpole2.setText("");
tpole3.setText("");
pole3.setVisible(false);
pole2.setVisible(false);
pole1.setVisible(true);
break;
case 2:// druga figura
pole1.setText("");
pole2.setText("");
pole3.setText("");
wpole1.setText("Pole =");
tpole1.setText("Długość boku a =");
tpole2.setText("Długość boku b =");
tpole3.setText("Długość boku c =");
wpole1.setText("Pole całkowite =");
wpole2.setText("Objętość = ");
pole1.setVisible(true);
pole2.setVisible(true);
pole3.setVisible(true);
break;
case 3:// druga figura
pole1.setText("");
wpole1.setText("Pole całkowite =");
tpole1.setText("Promień r=");
pole3.setVisible(false);
pole2.setVisible(false);
wpole2.setText("Objętość = ");
tpole2.setText("");
tpole3.setText("");
pole1.setVisible(true);
break;
case 4:
pole1.setText("");
pole2.setText("");
pole3.setText("");
wpole1.setText("Pole =");
tpole1.setText("Długość bopromienia r =");
tpole2.setText("Długość tworzącej l =");
tpole3.setText("Wysokość h = ");
wpole1.setText("Pole całkowite =");
wpole2.setText("Objętość = ");
pole1.setVisible(true);
pole2.setVisible(true);
pole3.setVisible(true);
break;
}
}
});
// dodanie przycisku
// nasłuchiwanie przycisku
klik.addActionListener(new ActionListener() {
private int White;
public void actionPerformed(ActionEvent e) {
int nr_lista = Jlista.getSelectedIndex();
if (nr_lista == 0) {
JOptionPane.showMessageDialog(null, "Wybierz figure" );
return;
}
//
// walidacja pól tekstowych
if (pole1.isVisible()) {
if (!validuj.sprCzyPoprawne(pole1.getText())) {
// jeśli coś jest nie tak zwróci false
JOptionPane.showMessageDialog(null,
"Wpisałes 0,liczbę ujemną albo literę jako wartość lub nic nie wpisałeś",
"Błąd",
JOptionPane.WARNING_MESSAGE);
return;
}
}
if (pole2.isVisible()) {
if (!validuj.sprCzyPoprawne(pole2.getText())) {
// jeśli coś jest nie tak zwróci false
JOptionPane.showMessageDialog(null,
"Wpisałes 0,liczbę ujemną albo literę jako wartość lub nic nie wpisałeś",
"Błąd",
JOptionPane.WARNING_MESSAGE);
return;
}
}
if (pole3.isVisible()) {
if (!validuj.sprCzyPoprawne(pole3.getText())) {
// jeśli coś jest nie tak zwróci false
JOptionPane.showMessageDialog(null,
"Wpisałes 0,liczbę ujemną albo literę jako wartość lub nic nie wpisałeś",
"Błąd",
JOptionPane.WARNING_MESSAGE);
return;
}
}
switch (nr_lista) {
case 1:// pierwsza figura
double pole_w1 = ((1.414213
* Double.parseDouble(pole1.getText())
* Double.parseDouble(pole1.getText()) * Double
.parseDouble(pole1.getText())) / 12);
wpole1.setText("Pole całkowite = " + pole_w1);
double pole_w1a = (1.442249 * Double
.parseDouble(pole1.getText()) * Double
.parseDouble(pole1.getText()));
wpole2.setText("Objętość = "
+ pole_w1a);
break;
case 2:// druga figura
double pole_w2 = (2 * ((Double.parseDouble(pole1
.getText()) * Double.parseDouble(pole2
.getText()))) + (2 * Double
.parseDouble(pole2.getText()) * Double
.parseDouble(pole3.getText())))
+ (2 * Double.parseDouble(pole1.getText()) * Double
.parseDouble(pole3.getText()));
wpole1.setText("Pole całkowite = " + pole_w2);
double pole_w2a = (Double.parseDouble(pole1
.getText())
* Double.parseDouble(pole2.getText()) * Double
.parseDouble(pole3.getText()));
wpole2.setText("Objętość = " + pole_w2a);
break;
case 3:// druga figura
double pole_w3 = (4 * 3.14 * (Double
.parseDouble(pole1.getText())
* Double.parseDouble(pole1.getText()) * Double
.parseDouble(pole1.getText())));
wpole1.setText("Pole całkowite = " + pole_w3);
double pole_w3a = (1.333333 * 3.14 * (Double
.parseDouble(pole1.getText())
* Double.parseDouble(pole1.getText()) * Double
.parseDouble(pole1.getText())));
wpole2.setText("Objętość = " + pole_w3a);
break;
case 4:
double pole_w4 = (3.14 * Double.parseDouble(pole1
.getText()) * (Double.parseDouble(pole1
.getText()) + Double.parseDouble(pole3
.getText())));
wpole1.setText("Pole calkowite = " + pole_w4);
double pole_w4a = (0.3333 * 3.14
* Double.parseDouble(pole1.getText())
* Double.parseDouble(pole1.getText()) * Double
.parseDouble(pole3.getText()));
wpole2.setText("Objętość = " + pole_w4a);
break;
}
}
});
panel.add(Jlista);
panel.add(tpole1);
panel.add(tpole2);
panel.add(tpole3);
panel.add(tpole4);
panel.add(pole1);
panel.add(pole2);
panel.add(pole3);
panel.add(wpole1);
panel.add(wpole2);
panel.add(klik);
okno.add(panel);
okno.setVisible(true);
}
}
static class validuj {
public static boolean sprCzyPoprawne(String text) {
// sprawdz czy nie puste
if (text.isEmpty()) {
return false;
}
// sprawdz czy jest to cyfra
Pattern pat1 = Pattern.compile("[0-9]");
Matcher mat = pat1.matcher(text);
if (!mat.matches()) {
return false;
}
// sprawdz czy dodatnie
if (Double.parseDouble(text) <= 0) {
return false;
}
return true;
}
}
}
Po wpisaniu liczby ujemnej lub litery wyrzuca błąd jednakże gdy wpisuję np liczbę zmienno przecinkową np. 4.32 wyrzuca błąd , a np jak wpisze liczbę 33,444,5555 to też wyrzuca.
Wiem że problem powoduje ten fragment kodu :
static class validuj {
public static boolean sprCzyPoprawne(String text) {
// sprawdz czy nie puste
if (text.isEmpty()) {
return false;
}
// sprawdz czy jest to cyfra
Pattern pat1 = Pattern.compile("[0-9]");
Matcher mat = pat1.matcher(text);
if (!mat.matches()) {
return false;
}
// sprawdz czy dodatnie
if (Double.parseDouble(text) <= 0) {
return false;
}
return true;
}
}
}
Jeżeli zmienię przy pattern pat opcję z false na true to moge wpisywać liczby jakie chcę ale nie wyrzuca mi błędu jak wpisze litere a nie wiem jak to poprawić .
Z góry dzięki za pomoc.