I have a Jframe in netbeans with 5 buttons, named buttons 1, 2, 3, 4, and 5. I'm trying to make it so if the buttons are pressed in this order 4, 2, 3, 1, it will display a dialogue box. My only problem is getting it to recognize the buttons have been pressed in the correct order.
If this were my project, I'd use a LinkedList<Integer> or ArrayList<Integer> to hold the Integer representing the buttons that have been pushed and in what order, and then would react if the last 5 presses matched the desired pattern. So each button press would add an Integer to the List, and then would check the last 5 entries, and if they match the pattern, bingo! show the JOptionPane.
Note that for the best help, you should show us what you've tried, and we can help you refine it.
Not sure why you are using buttons for this. Most people would use a JPasswordTextField.
If you really want to use buttons. Then you would need to keep a StringBuilder. Every time a button is pushed you would add the text of the button to the builder. Then you would check if the toString() of the builder is the password.
If the password is incorrect you would display a JOptionPane and then clear the builder so the user can start again.
Here you go:
Make a global String variable, I named it code, and initialize its value by "".
On each corresponding button, add code (for button 1) code+="1;" and check();
Create a method check, which contains these function:
(If you want the numbers of try limited by 5)
System.out.println("Numbers of try: "+code.length());
if(code.length()==5){
if(code.contains("32415")){
System.out.println("You made it!!");
}else{
code="";
}
}
(If you don't want to limit the numbers of try)
if(code.contains("32415")){
System.out.println("You made it!!");
}
Go ahead and try this, it works for me :)
Related
I'm designing a program simulating a vending machine. You know how vending machines have that one large text box that displays whatever messages you need to know...that's what I want to do. So basically, if the user clicks a button and if the item is out of store, expired, they don't have enough credit, whatever, the message should be displayed in this box.
Then, after a second or 2, return to displaying how much money the user put into the machine. I also want to make the box so that, well theres a button next to the text box to click to insert money. When they click that, I want to make the text box editable, they then enter the amount of money they want to enter, then press insert again, and the money is inserted. The text box becomes uneditable again, and displays the credit they have in the machine.
Does anyone have any suggestions as to how to do this?
I also was wondering how I could implement the delay before getting rid of the message and returning to displaying the credit in the machine. Thank you.
As Andrew Thompson says, you would use a JTextField. Set the desired text using the setText() method and you could then use a sleep function (usleep() I think should work for your application) and then set the text again back to the Dollar value.
Edit: didn't see the last half. To enable and disable the textfield entirely, use setEnabled(true/false), to stop it from being editable, use setEditable(true/false)
Also, just thinking, you could get the current date in a timestamp format and then enter a loop where you continually get the timestamp and compare it to the first one. If the desired difference is reached then exit the loop and update the textfield. Have a look at the Java doc for Date ;)
I'm doing a project (something like a restaurant) for collage, and I'm not very good in Java (they didn't really try to teach us). The principle of the project is to show a message saying what radio buttons and check boxes I've selected.
I have 5 radio buttons, they are for selecting a meal, and 5 check boxes for selecting a side dish. I've managed to have the radio buttons work but I don't know how to make the check boxes work...
This is the code for the radio buttons (this goes for all 5):
private void jRadioButton1ItemStateChanged(java.awt.event.ItemEvent evt) {
if (evt.getSource().equals(jRadioButton1))
{
Meal= jRadioButton1.getText(); //Meal is a String
}
I tried the same code for the check boxes but it only shows one side dish in the message, even though I selected multiple...
The code for the button that shows the message:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
JOptionPane.showMessageDialog(rootPane, "You have chosen:\n" + String.valueOf(Meal) + "\n" + String.valueOf(SideDish));
}
So basically, if anyone is willing to help, please tell me how to make the check boxes work... that every selected check box is shown in the message, like this:
You have chosen:
Pizza //meal
Ketchup //selected side dish #1
Chilli peppers //selected side dish #2
Feta cheese //selected side dish #3
I hope my question is clear...
Since you want to display text for zero or more checkboxes, you need to check for each whether it is selected, and concatenate the resulting text, instead of keeping only one option. Moreover, since check boxes can be checked and unchecked independently, it may be better to check their state only at the moment when the button is pressed instead of attempting to keep track of them all the time. E.g.:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
SideDish = "";
if (jCheckBox1.getState()))
{
SideDish += jCheckBox1.getText();
}
...
if (jCheckBox5.getState()))
{
SideDish += ", " + jCheckBox5.getText();
}
JOptionPane.showMessageDialog(rootPane, "You have chosen:\n" + Meal + "\n" + SideDish);
}
This is just an illustration, which won't always display separating commas properly - I will leave the fix to you as an exercise :-)
A more elegant solution would be to use a collection of Strings to collect the side dishes - again, you may try improving the code towards this.
Btw, you don't need String.valueOf() to print Strings so I removed it from the code above. And the Java coding convention is to start variable/field names with lowercase.
As you can select multiple checkboxes at the same time, you should collect the checked values in a collection. Set<String> comes to mind as you can select one side dish only once.
Also, you did not have this problem as each selection of the radio button overwrote the previous one, but you will need to remove items from the set if their corresponding checkbox is unticked.
Note: Set<> is an interface, you will need an implementing class to actually use it. In your case a HashSet<> would work (see documentation for the available method for Set and HashSet)
When you display the choice of side dishes, you can enumerate the elements in the set and eother print them one-by-one or collect the result in a string by concatenating the elements.
Note: you might not evenneed the set if you have direct access to the checkboxes: at the time of displaying which side dish is chosen, just check the state of each checkbox and accumulate the choices string as outlined above
Here is an example
Lets say you have 4 sidedishes
Vector<JCheckBox> boxes = new Vector<JCheckBox>
boxes.add(checkbox1) .... .add(checkbox4);
and on clicking the button
Vector<String> sideDishes = new Vector<String>();
for(int i=0; i<boxes.size(); i++){
if(boxes.elementAt(i).isSelected(){
sideDishes.add(boxes.elementAt(i).getText();
}
}
I am thinking that first you should learn is how to analyze problem and how to use Google or other search engine sites, So try to read this docs and look to examples
I am trying to develop an app in eclipse that when the button is clicked randomly displays text from a string.
There is a simple solution for it. You make use of the Random() class or you use Math.random() to iterate through your string as an array of characters. Then you just choose random bits of it, until it's gone.
All you have to make sure of though, is that the arrays size is always checked so that you don't hit an OutOfBoundsException
I'm new to GWT. I have a simple SuggestBox which is populated using a MultiWordSuggestOracle. Users input their data to this SuggestBox, and if they find any match with the existing Suggestions its well and good. I'm able to retrieve this value in the SelectionHandler code as below.
display.getSuggestBox().addSelectionHandler(new SelectionHandler<Suggestion>() {
public void onSelection(SelectionEvent<Suggestion> event) {
String selectedProperty = ((SuggestBox)event.getSource()).getValue();
// do something with the property value
}
});
But users are allowed to enter values which are not already in the Suggestion oracle, in which case I should read this value and do something with this,may be saving to db as a new data.(The thing which I'm looking for is something like a browsers navigation widget where we show suggestions, users can pick up any suggestion or he can type in his new entry and carry on.) What I needed is a way to retrieve this new text user has entered? Data will be read on a button click. What I tried out is this.
display.getSaveBtn().addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
String selectedProperty = display.getSuggestBox().getValue();
//String selectedProperty2 = display.getSuggestBox().getText();
// Blank in both cases :(
// tried display.getSuggestBox().getTextBox().getValue(),but blank again
}
});
I tried to employ onChange() event handlers (as shown below)
display.getSuggestBox().addValueChangeHandler(new ValueChangeHandler<String>() {
public void onValueChange(ValueChangeEvent<String> event) {
String selectedProperty = ((SuggestBox)event.getSource()).getValue();
Window.alert("on change -- "+selectedProperty);
}
});
This is working fine except one scenario. Suppose there are two suggestions in the oracle,say 'createTicketWsdl' and 'createTicketTimeout'. When the user types in 'cr', he is opted with these two options, and if he selects 'createTicketWsdl' by pressing keyboard ENTER, then my alert is printing 'createTicketWsdl' which is correct. But if he selects 'createTicketWsdl' using mouse, then my alert is printing 'cr' (I tried to post the screenshot to give a better understanding, but being a new user I'm not allowed).(which I wanted to get as 'createTicketWsdl'since thats what he has selected). Soon after printing my alert, the value in the SuggestBox changes to 'createTicketWsdl'.
Is there a way to retrieve the value of the suggest box? I saw a similiar thread GWT SuggestBox + ListBox Widget, where some source code for a custom widget is available. But I didn't take the pain of trying out that, since what I want is simply get the current value from the SuggestBox and I hope there should be some easy way.
Thanks for all your help!
Your question is not very clear. You need to clarify your language a lil' bit. For example - is the following a question or an assertion? I mean, it sounds like an assertion but it has a question mark.
What I needed is a way to retrieve this new text user has entered?
Also, I do not understand what you mean by "he is opted by". Did you mean to say, "he is presented with the options ..." ?
Therefore, I am guessing your situation.
You have a listbox of existing items.
You have a textbox which allows freeform text entry
Any items whose prefix values matches the current textbox entry, the listbox items would be filtered to be limited to the matching items.
Even if the current textbox entry presents matching prefixes to filtering the listbox, the user can still perform freeform text entry. So, there are two possible cases here
4.1 the user clicks on the list box to select one of the filtered items
4.2 the user press enter key, which triggers selection of the current value of the textbox.
However, you find your widget participating in a race condition, so that when you click on the widget, the ValueChangeHandler gets triggered rather than the SelectionHandler. I do not know the structure of your widget so that is my best guess.
The problem is that you are allowing two separate modes of obtaining an outcome and you probably did not have well-defined state machine to handle choosing the appropriate mode. One mode is by the textbox and the other is by selection on the listbox - and you do not have a well-defined way of which would mode would be effective at any moment.
If my guess is accurate, this is what you need to do:
You must restrict your outcome to coming from only the textbox.
Your listbox selection must not trigger any outcome. Any change in listbox selection must propagate back to the textbox - to allow the user the chance of making further freeform entry based on that value.
only the keyboard enter on the textbox will trigger the final outcome.
I'm writing my 1st Java program (in Netbeans) and I'm lost. I have 2 questions at the moment, if anyone is kind enough to help me.
Here's what the program is supposed to do:
take 1 of 4 "status" options, plus a 5 digit number (both of these items are entered by a user via a touch-screen monitor) and then email this info to someone with the subject line of: "Item #[5 digit number from JFormattedTextField] is currently [1 of 4 possible status options].
Email command would command after user clicks "enter" button, and then user clicks "OK" on a pop-up which asks user to confirm message about to be emailed. As far as my 3rd question, it's about the e-mailing part, and I figured that would be a another thread after I get this button & text field stuff ironed out.
Here's a picture of the touch screen UI I have so far:
(can't post images as a rookie, go to krisbunda.com/gui.png for this image)
Question #1:
the 4 status options (4 JButtons) are wrapped inside of a JPanel. I want the most recent button to have been pushed in the "statusPanel" JPanel to change the background to blue and the button text to white.
Can I put a mouselistener on the button's parent JPanel to listen for click events on the children (the 4 status JButtons), and then whichever button was last clicked, it will turn blue w/ white text? Please point me in the right direction.
Question #2:
I have a JFormattedTextField named "display" that shows the numbers as they're clicked, which are appended from a StringBuffer named "current". I want the text field to only accept a total of 5 numbers.
When I tried putting a mask of "#####" on the field, it would only chime a warning beep when I pushed the number pad's buttons. Currently I've chosen "Category: number" and "Format: custom" and then typed "#####" in the "Format:" field. This allows me to click number buttons and see their text displayed, but it doesn't stop me from typing more than 5 characters.
I'm doing this through the "Properties> FormatterFactory" dialog box. A screen shot is shown below:
(go to krisbunda.com/text-formatterFactory.png to view this image)
And here's the code I have so far:
(my post was too long with this code, so go to: krisbunda.com/java-sampleCode.txt to view)
Thanks in advance for any help!
Your code looks fine, and you already have fields set up to hold references to all your buttons, so now you just need to write the code inside the status setting buttons and then make them call a subroutine with the new status. This subroutine should then reset all the buttons to their default color and then set the special selected color on the button that corresponds to the new or existing status.
Edit: adding code here in response to your comment...
Firstly, never use == with Strings. You MUST use equals() otherwise when you get two Strings that are identical, but are different objects, they will not be the same and your comparisons will fail.
There are much better ways of coding this up, including using enums etc. but this should work for you:
// Reset all the buttons
outsideNotReadyButton.setBackground(...);
loadedButton.setBackground(...);
outsideReadyButton.setBackground(...);
shippedButton.setBackground(...);
// Now set the one of the button's colors conditionally
String status = ...
if(status.equals("SHIPPED")) {shippedButton.setBackground(Color.BLUE);}
else if(status.equals("LOADED")) {loadedButton.setBackground(Color.BLUE);}
// ...and so on
An ActionListener is the more common approach to buttons, as discussed in How to Use Buttons, etc. A FocusListener, also used in this example, is one way to change a button's appearance in the way you describe.
An sscce showing just your JFormattedTextField problem will be more helpful. Several such examples may be found in the article How to Use Formatted Text Fields.