I have created some textfields from which i want to use the user-input. I have read that i should use a documentlistener, but i have some difficulty implementing it the right place i think.
In the code i am trying to implement it to the textfield tf1. The input im should get is to be parsed to a double so i can do some math calculation on it.
Here is my code where i try to implement it.
import java.awt.ComponentOrientation;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
public class Display {
final static boolean shouldFill = true;
final static boolean shouldWeightX = true;
final static boolean RIGHT_TO_LEFT = false;
public static void addComponentsToPane(Container pane) {
if (RIGHT_TO_LEFT) {
pane.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
}
JButton button;
JLabel label;
pane.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
if (shouldFill) {
//natural height, maximum width
c.fill = GridBagConstraints.HORIZONTAL;
}
if (shouldWeightX) {
c.weightx = 0.5;
}
...
button = new JButton("Value Bet");
c.fill = GridBagConstraints.HORIZONTAL;
c.ipady = 0;
c.gridx = 0;
c.gridy = 1;
pane.add(button, c);
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
//Execute when button is pressed
JFrame frame = new JFrame("Value Bet");
frame.setVisible(true);
frame.setSize(500,300);
GridBagLayout layout = new GridBagLayout();
frame.setLayout(layout);
GridBagConstraints c = new GridBagConstraints();
JLabel label;
JTextField tf;
if (shouldFill) {
//natural height, maximum width
c.fill = GridBagConstraints.HORIZONTAL;
}
if (shouldWeightX) {
c.weightx = 0.5;
}
...
final JTextField tf1 = new JTextField();
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 1;
c.gridy = 2;
frame.add(tf1, c);
tf1.getDocument().addDocumentListener(new DocHandler(){
public class DocHandler implements DocumentListener{
@Override
public void changedUpdate(DocumentEvent arg0) {
tfHasChanged();
}
@Override
public void insertUpdate(DocumentEvent arg0) {
tfHasChanged();
}
@Override
public void removeUpdate(DocumentEvent arg0) {
tfHasChanged();
}
}
public void tfHasChanged(){
double chance1 = Double.parseDouble(tf1.getText());
}
});
... div components
}
private static void createAndShowGUI() {
//Create and set up the window.
JFrame frame = new JFrame("Betting Application");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Set up the content pane.
addComponentsToPane(frame.getContentPane());
//Display the window.
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
//Schedule a job for the event-dispatching thread:
//creating and showing this application's GUI.
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}
For Numbers you have to implementing DocumentFilter or directly to use JFormattedTextField with Number formatter
then possible way (block executions) codelines
and add some formulas for
textField1, for exampletextField1equals value fromtextField2e.g.