Using FocusListener to retrieve contents from JTextField and populate other JTextFields












1















I have a number of components in my window, most of them JTextFields. To save the user time in entering data, I am trying to parse the contents of the first JTextField when populated, and put suggested values into subsequent JTextFields.



I have added a FocusListener to the first JTextField, and in focusLost() I retrieve its contents and then set the contents of the subsequent JTextFields. This works correctly the first time the application is used. However on subsequent tasks (i.e. after all the data has been processed and the fields cleared) it usually (but not always) fails. Debugging is difficult with focus issues so I have resorted to logging instead and can see that in the failing cases the getText() method on the first JTextField is returning null. This must be a timing issue but I cannot see a way round it.



The focusLost() method begins...



@Override
public void focusLost(FocusEvent e) {
// On losing focus of the title field attempt to populate all the other
// resource detail fields
Component rawComponent = e.getComponent();
if (this.resourceTitleTextField == rawComponent) {

JTextField component = (JTextField) rawComponent;
String title = component.getText();
LOGGER.info("title = " + title);









share|improve this question























  • As an update to this. I was unable to solve this the "correct" way so I have instead moved the logic to the focusGained() method and execute it on the next field in the tab order. It now works correctly, although of course I am dependant on the user tabbing through fields (or at least moving between them in the "standard" order) so this is not a perfect answer. Hence I'd still love to solve the initial problem.

    – Mark
    Jan 2 at 16:16













  • Please post the full (relevant) code. This focusLost approach should work. So, I guess you are making a mistake somewhere. If possible, post Minimal, Complete, and Verifiable example.

    – Prasad Karunagoda
    Jan 8 at 12:36
















1















I have a number of components in my window, most of them JTextFields. To save the user time in entering data, I am trying to parse the contents of the first JTextField when populated, and put suggested values into subsequent JTextFields.



I have added a FocusListener to the first JTextField, and in focusLost() I retrieve its contents and then set the contents of the subsequent JTextFields. This works correctly the first time the application is used. However on subsequent tasks (i.e. after all the data has been processed and the fields cleared) it usually (but not always) fails. Debugging is difficult with focus issues so I have resorted to logging instead and can see that in the failing cases the getText() method on the first JTextField is returning null. This must be a timing issue but I cannot see a way round it.



The focusLost() method begins...



@Override
public void focusLost(FocusEvent e) {
// On losing focus of the title field attempt to populate all the other
// resource detail fields
Component rawComponent = e.getComponent();
if (this.resourceTitleTextField == rawComponent) {

JTextField component = (JTextField) rawComponent;
String title = component.getText();
LOGGER.info("title = " + title);









share|improve this question























  • As an update to this. I was unable to solve this the "correct" way so I have instead moved the logic to the focusGained() method and execute it on the next field in the tab order. It now works correctly, although of course I am dependant on the user tabbing through fields (or at least moving between them in the "standard" order) so this is not a perfect answer. Hence I'd still love to solve the initial problem.

    – Mark
    Jan 2 at 16:16













  • Please post the full (relevant) code. This focusLost approach should work. So, I guess you are making a mistake somewhere. If possible, post Minimal, Complete, and Verifiable example.

    – Prasad Karunagoda
    Jan 8 at 12:36














1












1








1








I have a number of components in my window, most of them JTextFields. To save the user time in entering data, I am trying to parse the contents of the first JTextField when populated, and put suggested values into subsequent JTextFields.



I have added a FocusListener to the first JTextField, and in focusLost() I retrieve its contents and then set the contents of the subsequent JTextFields. This works correctly the first time the application is used. However on subsequent tasks (i.e. after all the data has been processed and the fields cleared) it usually (but not always) fails. Debugging is difficult with focus issues so I have resorted to logging instead and can see that in the failing cases the getText() method on the first JTextField is returning null. This must be a timing issue but I cannot see a way round it.



The focusLost() method begins...



@Override
public void focusLost(FocusEvent e) {
// On losing focus of the title field attempt to populate all the other
// resource detail fields
Component rawComponent = e.getComponent();
if (this.resourceTitleTextField == rawComponent) {

JTextField component = (JTextField) rawComponent;
String title = component.getText();
LOGGER.info("title = " + title);









share|improve this question














I have a number of components in my window, most of them JTextFields. To save the user time in entering data, I am trying to parse the contents of the first JTextField when populated, and put suggested values into subsequent JTextFields.



I have added a FocusListener to the first JTextField, and in focusLost() I retrieve its contents and then set the contents of the subsequent JTextFields. This works correctly the first time the application is used. However on subsequent tasks (i.e. after all the data has been processed and the fields cleared) it usually (but not always) fails. Debugging is difficult with focus issues so I have resorted to logging instead and can see that in the failing cases the getText() method on the first JTextField is returning null. This must be a timing issue but I cannot see a way round it.



The focusLost() method begins...



@Override
public void focusLost(FocusEvent e) {
// On losing focus of the title field attempt to populate all the other
// resource detail fields
Component rawComponent = e.getComponent();
if (this.resourceTitleTextField == rawComponent) {

JTextField component = (JTextField) rawComponent;
String title = component.getText();
LOGGER.info("title = " + title);






jtextfield focuslistener






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Jan 1 at 5:31









MarkMark

62




62













  • As an update to this. I was unable to solve this the "correct" way so I have instead moved the logic to the focusGained() method and execute it on the next field in the tab order. It now works correctly, although of course I am dependant on the user tabbing through fields (or at least moving between them in the "standard" order) so this is not a perfect answer. Hence I'd still love to solve the initial problem.

    – Mark
    Jan 2 at 16:16













  • Please post the full (relevant) code. This focusLost approach should work. So, I guess you are making a mistake somewhere. If possible, post Minimal, Complete, and Verifiable example.

    – Prasad Karunagoda
    Jan 8 at 12:36



















  • As an update to this. I was unable to solve this the "correct" way so I have instead moved the logic to the focusGained() method and execute it on the next field in the tab order. It now works correctly, although of course I am dependant on the user tabbing through fields (or at least moving between them in the "standard" order) so this is not a perfect answer. Hence I'd still love to solve the initial problem.

    – Mark
    Jan 2 at 16:16













  • Please post the full (relevant) code. This focusLost approach should work. So, I guess you are making a mistake somewhere. If possible, post Minimal, Complete, and Verifiable example.

    – Prasad Karunagoda
    Jan 8 at 12:36

















As an update to this. I was unable to solve this the "correct" way so I have instead moved the logic to the focusGained() method and execute it on the next field in the tab order. It now works correctly, although of course I am dependant on the user tabbing through fields (or at least moving between them in the "standard" order) so this is not a perfect answer. Hence I'd still love to solve the initial problem.

– Mark
Jan 2 at 16:16







As an update to this. I was unable to solve this the "correct" way so I have instead moved the logic to the focusGained() method and execute it on the next field in the tab order. It now works correctly, although of course I am dependant on the user tabbing through fields (or at least moving between them in the "standard" order) so this is not a perfect answer. Hence I'd still love to solve the initial problem.

– Mark
Jan 2 at 16:16















Please post the full (relevant) code. This focusLost approach should work. So, I guess you are making a mistake somewhere. If possible, post Minimal, Complete, and Verifiable example.

– Prasad Karunagoda
Jan 8 at 12:36





Please post the full (relevant) code. This focusLost approach should work. So, I guess you are making a mistake somewhere. If possible, post Minimal, Complete, and Verifiable example.

– Prasad Karunagoda
Jan 8 at 12:36












0






active

oldest

votes











Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53993209%2fusing-focuslistener-to-retrieve-contents-from-jtextfield-and-populate-other-jtex%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























0






active

oldest

votes








0






active

oldest

votes









active

oldest

votes






active

oldest

votes
















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53993209%2fusing-focuslistener-to-retrieve-contents-from-jtextfield-and-populate-other-jtex%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

MongoDB - Not Authorized To Execute Command

How to fix TextFormField cause rebuild widget in Flutter

in spring boot 2.1 many test slices are not allowed anymore due to multiple @BootstrapWith