Witam
Robię program w swingu, w którym użytkownik między innymi musi podać pesel, chciałbym żeby obok miejsca gdzie wpisuje użytkownik pisało czy jest poprawny, stworzyłem klasę sprawdzającą, lecz nie wiem jak zrobić, żeby wypisywało status, kombinowałem na różne sposoby i nadal nie znalazłem rozwiązania. Zaznaczam, że jestem początkującym programistą. Proszę o pomoc.
- Rejestracja:około 12 lat
- Ostatnio:około 9 lat
- Postów:29
- Rejestracja:około 12 lat
- Ostatnio:około 9 lat
- Postów:29
nie rozumiem jak za pomocą setText mam to zrobić. Część kodu:
public class Dodaj extends JFrame {
String popraw;
public Dodaj() {
JPanel dman = new JPanel();
JPanel mtek = new JPanel();
JLabel tl3 = new JLabel("PESEL:");
JLabel spr = new JLabel (popraw);
psl = new JTextField(10);
tf2.add(tl3); tf2.add(psl); tf2.add(spr);
tf2.setLayout(new FlowLayout(FlowLayout.LEFT));
mtek.add(tf2);
JButton zap = new JButton("Zapisz");
dman.setLayout(new BorderLayout());
mtek.setLayout(new BoxLayout(mtek, 3));
dman.add(zap, BorderLayout.PAGE_END);
dman.add(mtek, BorderLayout.CENTER);
zap.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
zapisz();
}
});
setContentPane(dman);
pack();
setVisible(true);
}
i klasa sprawdzającą pesel:
public class PeselCheck {
private byte PESEL[] = new byte[11];
boolean popraw = false;
int rok, miesiac, dzien;
public PeselCheck(String psl) {
try {
if (psl.length() != 11) {
popraw = false;
} else {
for (int i = 0; i < 11; i++) {
PESEL[i] = Byte.parseByte(psl.substring(i, i + 1));
}
if (sumKont() && sprMies() && sprDnia()) {
popraw = true;
} else {
popraw = false;
}
}
} catch (NullPointerException e) {
System.out.println("Błąd " + e);
}
}
public int rokUr() {
rok = 10 * PESEL[0];
rok += PESEL[1];
miesiac = 10 * PESEL[2];
miesiac += PESEL[3];
if (miesiac > 80 && 93 < miesiac) {
rok += 1800;
} else if (miesiac > 0 && 13 > miesiac) {
rok += 1900;
} else if (miesiac > 20 && 33 > miesiac) {
rok += 2000;
} else if (miesiac > 40 && 53 > miesiac) {
rok += 2100;
} else if (miesiac > 60 && 73 > miesiac) {
rok += 2200;
}
return rok;
}
public int MiesiacUr() {
miesiac = 10 * PESEL[2];
miesiac += PESEL[3];
if (miesiac > 80 && miesiac < 93) {
miesiac -= 80;
} else if (miesiac > 20 && miesiac < 33) {
miesiac -= 20;
} else if (miesiac > 40 && miesiac < 53) {
miesiac -= 40;
} else if (miesiac > 60 && miesiac < 73) {
miesiac -= 60;
}
return miesiac;
}
public int dzienUr() {
dzien = 10 * PESEL[4];
dzien += PESEL[5];
return dzien;
}
public String plec() {
if (popraw) {
if (PESEL[9] % 2 == 1) {
return "Mężczyzna";
} else {
return "Kobieta";
}
} else {
return "---";
}
}
private boolean sumKont() {
int sum = 1 * PESEL[0]
+ 3 * PESEL[1]
+ 7 * PESEL[2]
+ 9 * PESEL[3]
+ 1 * PESEL[4]
+ 3 * PESEL[5]
+ 7 * PESEL[6]
+ 9 * PESEL[7]
+ 1 * PESEL[8]
+ 3 * PESEL[9];
sum %= 10;
sum = 10 - sum;
sum %= 10;
if (sum == PESEL[10]) {
return true;
} else {
return false;
}
}
private boolean sprMies() {
int miesiace = MiesiacUr();
if (miesiace > 0 && miesiace < 13) {
return true;
} else {
return false;
}
}
private boolean sprDnia() {
int roki = rokUr();
int miesiace = MiesiacUr();
int dziena = dzienUr();
if ((dziena > 0 && dziena < 32)
&& (miesiace == 1 || miesiace == 3 || miesiace == 5
|| miesiace == 7 || miesiace == 8 || miesiace == 10
|| miesiace == 12)) {
return true;
} else if ((dziena > 0 && dziena < 31)
&& (miesiace == 4 || miesiace == 6 || miesiace == 9
|| miesiace == 11)) {
return true;
} else if ((dziena > 0 && dziena < 30 && rokPrzest(roki))
|| (dziena > 0 && dziena < 29 && !rokPrzest(roki))) {
return true;
} else {
return false;
}
}
private boolean rokPrzest(int rok) {
if (rok % 4 == 0 && rok % 100 != 0 || rok % 400 == 0) {
return true;
} else {
return false;
}
}
}

- Rejestracja:prawie 17 lat
- Ostatnio:prawie 5 lat
Tworząc obiekt klasy PeselCheck przekaż referencję do klasy Dodaj,
public class PeselCheck {
private byte PESEL[] = new byte[11];
boolean popraw = false;
int rok, miesiac, dzien;
public PeselCheck(String psl, Dodaj okno) {
try {
if (psl.length() != 11) {
okno.spr.setText("Zła długość - wymagane jest 11 znaków");
} else {
for (int i = 0; i < 11; i++) {
PESEL[i] = Byte.parseByte(psl.substring(i, i + 1));
}
//można dużo prościej
PESEL = psl.getBytes();
if (sumKont() && sprMies() && sprDnia()) {
okno.spr.setText("Poprawny Pesel");
} else {
okno.spr.setText("Niepoprawny Pesel");;
}
}
} catch (NullPointerException e) {
System.out.println("Błąd " + e);
}
}
- Rejestracja:około 12 lat
- Ostatnio:około 9 lat
- Postów:29
Nie wiem czemu nie widzi mi, że w okno jest zmienna spr. Już wiem trzeba było wyjąć z konstruktora zmienną, ale teraz nie wiem jak to wywołać, żeby mi nie zawiesiło programu gdy robię to tak:
Dodaj okno = new Dodaj();
PeselCheck pEsEl = new PeselCheck(pesel, okno);
zawiesza mi się, domyślam się, że to dlatego, że w konstruktorze wywołuję konstruktor i tak w kółko.
- Rejestracja:około 12 lat
- Ostatnio:około 9 lat
- Postów:29
Próbowałem w konstruktorze oraz tworzyłem metodę, którą wywoływałem w konstruktorze, lecz zwróciłem uwagę, że przecież muszę najpierw sczytać wpisany pesel, w metodzie zapisz jest pesel = psl.getText(); więc i tam wstawiałem i wciąż zawiesza się.
- Rejestracja:około 12 lat
- Ostatnio:około 9 lat
- Postów:29
zrobiłem trochę inaczej, po pierwsze to PESEL = psl.getBytes(); nie spełnia tego samego co w moim kodzie, jakieś inne liczby pojawiły się w tablicy PESEL, po drugie wróciłem do mojego sposobu tylko usunąłem w klasie PeselCheck przypisanie false do zmiennej popraw następnie w metodzie zapisz wstawiłem
PeselCheck pEsEl = new PeselCheck(pesel);
if(pEsEl.popraw){
popraw = "Nr PESEL poprawny";}else{
popraw = "Nr PESEL niepoprawny";}
spr.setText(popraw);
nie jest to do końca to co chciałem osiągnąć, ale już mi się nie chce kombinować.