код не видит значение JTextField, несмотря на то, что он отображается в интерфейсе - PullRequest
0 голосов
/ 07 мая 2019

Я хочу получить значение int из nrZamowieniaJTF (TextField). Он инициализируется в другом окне (OknoListaZamowien) следующим кодом:

if (e.getSource() == zapiszJB) {
OknoEdycjaZamowienia ob = new OknoEdycjaZamowienia();
ob.setVisible(true);
try {
    nrZamowieniaLista = Integer.parseInt(idJTF.getText());
} catch (NumberFormatException xxx) {
    nrZamowieniaLista = 1;
    idJTF.setText("1");
}

ob.nrZamowieniaJTF.setText(Integer.toString(nrZamowieniaLista));
this.setVisible(false);
}

Вот так выглядит окно (как вы можете видеть, номер 3 теперь назначен nrZamowieniaJTF): окно, в котором отображается nrZamowieniaJTF

Но у меня возникает ошибка, когда я пытаюсь перевести это значение в int в другое окно с именем OknoEdycjaZamowienia, например:

nrZamowieniaJTF = new JTextField();
nrZamowieniaJTF.setBounds(460, 30, 100, 20);
nrZamowieniaJTF.setEditable(false);
getContentPane().add(nrZamowieniaJTF);

int nrZamowienia = Integer.parseInt(nrZamowieniaJTF.getText());

Это ошибка, с которой я сталкиваюсь (когда я это вижу, окно (на картинке) не отображается):

Exception in thread "AWT-EventQueue-0"
java.lang.NumberFormatException: For input string: ""   at
java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:592)     at
java.lang.Integer.parseInt(Integer.java:615)    at
com.tasia2931.okna.OknoEdycjaZamowienia.<init>(OknoEdycjaZamowienia.java:135)
    at
com.tasia2931.okna.OknoListaZamowien.actionPerformed(OknoListaZamowien.java:125)    at
javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
    at
javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
    at
javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at
javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at
javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    at java.awt.Component.processMouseEvent(Component.java:6539)    at
javax.swing.JComponent.processMouseEvent(JComponent.java:3324)  at
java.awt.Component.processEvent(Component.java:6304)    at
java.awt.Container.processEvent(Container.java:2239)    at
java.awt.Component.dispatchEventImpl(Component.java:4889)   at
java.awt.Container.dispatchEventImpl(Container.java:2297)   at
java.awt.Component.dispatchEvent(Component.java:4711)   at
java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904)
    at
java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476)
    at java.awt.Container.dispatchEventImpl(Container.java:2283)    at
java.awt.Window.dispatchEventImpl(Window.java:2746)     at
java.awt.Component.dispatchEvent(Component.java:4711)   at
java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760)  at
java.awt.EventQueue.access$500(EventQueue.java:97)  at
java.awt.EventQueue$3.run(EventQueue.java:709)  at
java.awt.EventQueue$3.run(EventQueue.java:703)  at
java.security.AccessController.doPrivileged(Native Method)  at
java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
    at
java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)
    at java.awt.EventQueue$4.run(EventQueue.java:733)   at
java.awt.EventQueue$4.run(EventQueue.java:731)  at
java.security.AccessController.doPrivileged(Native Method)  at
java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:730)   at
java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
    at
java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

Это заставляет меня думать, что каким-то образом значение nrZamowieniaJTF.getText() является ничем, поэтому его нельзя присвоить моей переменной int: /

Ваша помощь будет высоко оценена! Спасибо за ваше время:)

1 Ответ

0 голосов
/ 07 мая 2019

По моему мнению, возможны две возможности:

nrZamowieniaJTF может быть не тем же экземпляром, когда вы добавляете его в ContentPane. Таким образом, вы можете иметь другой экземпляр в ob.nrZamowieniaJTF, и другой экземпляр фактически добавляется в ContentPane. В этом случае вы должны быть уверены, что это одни и те же экземпляры и что это поле создается только один раз, для этого у вас должен быть только один вызов nrZamowieniaJTF = new JTextField ();

Вторая возможность состоит в том, что ваш код пытается прочитать и проанализировать значение этого поля, прежде чем ему будет присвоено какое-либо значение. В этом случае вам следует проанализировать значение из этого поля после того, как оно действительно установлено.

...