在我试图制作的一个程序中,有三个文本字段和几个按钮(每个按钮代表一个数字)。我正在尝试获取它,这样你就可以通过点击按钮(而不是键盘)来打字了。到目前为止,我得到了这个:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.text.*;
public class GUI extends JFrame {
private JButton[] numPad = new JButton[10];
private JTextField totalBill = new JTextField();
private JTextField totalPeople = new JTextField();
private JTextField tipPercentage = new JTextField();
private JTextField tipAmount = new JTextField();
private JTextField grandTotal = new JTextField();
private JTextField totalPerPerson = new JTextField();
private JButton doneButton = new JButton("Done");
private JButton clearButton = new JButton("Clear");
////////////////////////////////////////////////////////////////////////
private JPanel superContainer;
private JPanel container;
private JPanel panel1 = new JPanel();
private JPanel panel2 = new JPanel();
public GUI() {
//Set JFrame title.
super("Tip Calculator");
superContainer = new JPanel();
superContainer.setLayout(new BoxLayout(superContainer, BoxLayout.Y_AXIS));
//Create a container to hold two GridLayouts beside one another.
container = new JPanel();
container.setLayout(new BoxLayout(container, BoxLayout.X_AXIS));
//Create panels to be placed in container panel.
panel1.setPreferredSize(new Dimension(500, 250));
panel1.setLayout(new GridLayout(4,3,10,10));
panel2.setPreferredSize(new Dimension(500, 250));
panel2.setLayout(new GridLayout(7,2,10,10));
//Populate all the JButtons for the numPad.
for (int i=0; i<=9; i++) {
numPad[i] = new JButton(Integer.toString(i));
}
//Place each numPad button on the first JPanel.
for (int i=1; i<=9; i++) {
panel1.add(numPad[i]);
}
panel1.add(numPad[0]);
//Populate second GridLayout.
panel2.add(new JLabel("Total Bill: "));
panel2.add(totalBill);
panel2.add(new JLabel("Total People: "));
panel2.add(totalPeople);
panel2.add(new JLabel("Total Percentage: "));
panel2.add(tipPercentage);
panel2.add(doneButton);
panel2.add(clearButton);
panel2.add(new JLabel("Tip Amount: "));
panel2.add(tipAmount);
panel2.add(new JLabel("Grand Total: "));
panel2.add(grandTotal);
panel2.add(new JLabel("Total/Person: "));
panel2.add(totalPerPerson);
grandTotal.setEditable(false);
tipAmount.setEditable(false);
totalPerPerson.setEditable(false);
//Add the first GridLayout panel to the container.
container.add(panel1);
//Create a space between the GridLayout panels.
container.add(Box.createRigidArea(new Dimension(30,0)));
//Add the second GridLayout panel to the container.
container.add(panel2);
//Same as above but with title ontop and container panel below.
superContainer.add(new JLabel("Title"));
superContainer.add(Box.createRigidArea(new Dimension(0,30)));
superContainer.add(container);
//The panel the JFrame uses.
this.setContentPane(superContainer);
TheHandler handler = new TheHandler();
doneButton.addActionListener(handler);
clearButton.addActionListener(handler);
}
private class TheHandler implements ActionListener {
public void actionPerformed(ActionEvent e) {
if (e.getSource()==doneButton) {
tipAmount.setText(Double.toString(Double.parseDouble(totalBill.getText()) * (Double.parseDouble(tipPercentage.getText()) / 100)));
grandTotal.setText(Double.toString(Double.parseDouble(tipAmount.getText()) + Double.parseDouble(totalBill.getText())));
totalPerPerson.setText(Double.toString(Double.parseDouble(grandTotal.getText()) / Double.parseDouble(totalPeople.getText()))); }
else if (e.getSource()==clearButton) {
grandTotal.setText("");
tipAmount.setText("");
totalPerPerson.setText("");
totalBill.setText("0");
tipPercentage.setText("0");
totalPeople.setText("1");
totalBill.requestFocus();
totalBill.selectAll(); }
}
}
}
在搜索互联网后,我发现了以下代码:
private class AddDigit extends TextAction {
private String digit;
public AddDigit(String digit) {
super( digit );
this.digit = digit;
}
public void actionPerformed(ActionEvent e) {
JTextComponent component = getFocusedComponent();
component.replaceSelection( digit );
}
}
唯一的问题是,我不知道如何使用我找到的代码(我找到的代码是第二个块)。
我从哪里得到密码的。
我不知道如何使用我找到的代码
您可以从操作中创建一个按钮,然后将该按钮添加到GUI中。例如:
JButton one = new JButton( new AddDigit("1") );
代码将把文本添加到具有焦点的最后一个文本字段中。
你需要做的本质是:
1。创建一个方法,在文本框的末尾追加一个数字
2。向调用该方法的每个按钮添加一个事件侦听器,将当前按钮的值传递给该方法。
例如:
// Method to Append Number to Textbox
public void addNumberToTextBox(int currentVal) {
txtOutputBox.Value = txtOutputBox.Value + currentVal
}
// Initialize Some Buttons
JButton btnOne = new JButton("1");
JButton btnTwo = new JButton("2");
JButton btnThree = new JButton("3");
// Add an ActionListener to the buttons
ButtonHandler handler = new ButtonHandler();
btnOne.addActionListener(handler);
btnTwo.addActionListener(handler);
btnThree.addActionListener(handler);
// Class to deal with when a button is pressed
private class ButtonHandler implements ActionListener {
public void actionPerformed(ActionEvent e) {
// Converst the number to int
int num = Integer.parseInt(e.getSource().Value);
// Call the method
addNumberToTextBox(num);
}
}
如果你不“期望”用户使用键盘来导航按钮,那么我只会让它们不可聚焦。这样,用户可以单击按钮,但当前活动字段不会失去焦点。用户可以直接在字段中键入或单击numpad。。。
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.KeyboardFocusManager;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.text.JTextComponent;
public class TestNumPad {
public static void main(String[] args) {
new TestNumPad();
}
public TestNumPad() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
public TestPane() {
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridwidth = GridBagConstraints.REMAINDER;
JTextField field = new JTextField(10);
add(field, gbc);
add(new NumPad(), gbc);
field.requestFocusInWindow();
}
@Override
public Dimension getPreferredSize() {
return new Dimension(200, 200);
}
}
public class NumPad extends JPanel {
private ActionHandler actionHandler;
public NumPad() {
setLayout(new GridLayout(4, 3));
actionHandler = new ActionHandler();
for (int index = 1; index < 10; index++) {
add(createButton(index));
}
add(new JPanel());
add(createButton(0));
add(new JPanel());
}
protected JButton createButton(int index) {
JButton btn = new JButton(String.valueOf(index));
btn.setFocusable(false);
btn.addActionListener(actionHandler);
return btn;
}
public class ActionHandler implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if (source instanceof JButton) {
JButton btn = (JButton) source;
try {
int value = Integer.parseInt(btn.getText().trim());
Component comp = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner();
if (comp instanceof JTextComponent) {
JTextComponent tc = (JTextComponent) comp;
tc.setText(tc.getText() + value);
}
} catch (Exception exp) {
exp.printStackTrace();
}
}
}
}
}
}
问题内容: 我们有一个Web应用程序,我正在尝试使用Java,Web Driver和TestNG对其进行自动化测试。我面临的最大挑战(失败)是保持开发领先地位,并防止测试框架即使进行很小的代码更改就不会破坏。 问题 有一个接受数字的文本字段。到现在为止,为我完成了工作。 在页面源的最新更改中,输入数字后,逗号会自动插入。 因此,例如,“ 50000”变为“ 50,000”。 现在可以正确输入该值,
我一直习惯于使用jquery或其他javascript框架,但现在我没有框架可供使用,所以我想看看是否有人知道我如何在可能的情况下使用纯javascript实现这一点。 基本上我有一个这样的div 我需要的一个是,当点击AddMore按钮时,我需要基本上添加更多的宽度和长度字段,或者创建一个完整的结构,就像上面包含所有div的结构,或者只是插入一个新的span标记,其中包含现有div下面的字段。
我需要清除编辑文本时单击按钮。在java中,我们使用getText或setText,但在科特林中,我找不到任何东西。 我尝试使用此选项,但---text=“”---导致类型不匹配
驱动程序的fire中有一个bug。使用chrome驱动解决了这个问题。 代码 我试过联系搜索。clear()和click()方法,但输入仍然为空。代码来自https://web.whatsapp.com/登录后会出现一个名为“搜索”或“开始新聊天”的字段。我想在该字段中输入文本。
我的布局文件中确实有一个。与此类似: 上述实现的代码是: 我想让“小写文本”中的文本。我该怎么做?
有没有简单的库来获取gui功能,比如文本字段、处理中的文本区域。我在processing中编写了一个乒乓球游戏,我希望文本字段能够获得玩家的名字。在下面的代码中,我想要一个文本字段来获取玩家的名字。这里是我的代码