Java 从GUI检索值
作为赋值的一部分,我试图从JTextField中检索一个值。我想得到的是一个账户的利率。它应该大于零&应该询问用户,直到他/她给出大于零的值。另外,如果输入的不是数字,比如一个文本字符串,也应该有一个错误,它应该再次询问用户 我已经完成了部分任务,但在完成任务时遇到了问题 以下是调用GUI的方法:Java 从GUI检索值,java,swing,user-interface,Java,Swing,User Interface,作为赋值的一部分,我试图从JTextField中检索一个值。我想得到的是一个账户的利率。它应该大于零&应该询问用户,直到他/她给出大于零的值。另外,如果输入的不是数字,比如一个文本字符串,也应该有一个错误,它应该再次询问用户 我已经完成了部分任务,但在完成任务时遇到了问题 以下是调用GUI的方法: //getting the interest rate protected void getInterest() { if( this instanceof flexibleAccount
//getting the interest rate
protected void getInterest() {
if( this instanceof flexibleAccount ) {
}
else {
GetInterest getInterest = new GetInterest();
getInterest.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
getInterest.setSize( 350, 100 );
getInterest.setVisible(true);
}//end else
}//end getInterest
这里是:
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import java.util.InputMismatchException;
public class GetInterest extends JFrame {
private JTextField textField;
private double interestRate;
public GetInterest() {
super("Banking Application");
setLayout( new FlowLayout() );
textField = new JTextField("Enter interest rate",10);
add(textField);
TextFieldHandler handler = new TextFieldHandler();
textField.addActionListener( handler );
}//end GetInterest
private class TextFieldHandler implements ActionListener {
@Override
public void actionPerformed( ActionEvent event ) {
try {
String string;
string = textField.getText();
//string = String.format("%s", event.getActionCommand());
interestRate = Double.parseDouble(string);
if( interestRate <= 0 )
JOptionPane.showMessageDialog( null, "Interest rate should be greater than zero" );
else if( interestRate > 0 ) {
JOptionPane.showMessageDialog( null, interestRate );
}
//else
//throw new InputMismatchException;
}
catch(InputMismatchException exception) {
System.out.println(accountTest.getStackTrace(exception));
}
}//end actionPerformed
}//end TextFieldHandler
}//end GetInterest
导入java.awt.FlowLayout;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入javax.swing.JFrame;
导入javax.swing.JOptionPane;
导入javax.swing.JTextField;
导入java.util.InputMismatchException;
公共类GetInterest扩展了JFrame{
私有JTextField textField;
私人双重利益;
公众利益(){
超级(“银行应用程序”);
setLayout(新的FlowLayout());
textField=新的JTextField(“输入利率”,10);
添加(文本字段);
TextFieldHandler=新的TextFieldHandler();
addActionListener(处理程序);
}//结束兴趣
私有类TextFieldHandler实现ActionListener{
@凌驾
已执行的公共无效操作(操作事件){
试一试{
字符串字符串;
string=textField.getText();
//string=string.format(“%s”,event.getActionCommand());
interestRate=Double.parseDouble(字符串);
如果(利率为0){
showMessageDialog(null,interestRate);
}
//否则
//抛出新的输入失配异常;
}
捕获(输入不匹配异常){
System.out.println(accountTest.getStackTrace(异常));
}
}//已执行的结束操作
}//结束文本字段处理程序
}//结束兴趣
正如您所看到的,我正在获取值,并且再次询问用户是否输入了小于或等于零的值
但缺少以下内容:
- 将其返回到getInterest方法
- 完工后窗口消失
- 如果用户输入文本,则显示错误
如何实现这些功能。如果用户输入文本,则显示错误。k值将是JTextField文本 我用try-catch解决了这个问题
public static void main(String[] args) {
String k = "a";
try{
System.out.println(Integer.parseInt(k));
}catch(NumberFormatException ex){
JOptionPane.showConfirmDialog(this, "Is not required data");
}
完成后窗口消失
在int value=JOptionPane.showMessageDialog(null,interestRate)之后代码>方法执行它返回一个整数。例如,如果您的对话框有ok、no、cancel,您将得到ok值=0;正常值=1代码>
取消值=2
您将检查,如果值==2,则关闭帧
第一个我不明白你为什么不干脆让键盘上的字母和符号键静音呢
试试这个代码,它更优雅、更漂亮
只需在JTextField上注册一个键型侦听器
private void jTextField1KeyTyped(KeyEvent evt)
{
int x = evt.getKeyChar();
if (x != KeyEvent.VK_BACK_SPACE && x !=KeyEvent.VK_PERIOD) {
if(x ==KeyEvent.VK_PERIOD)
{
if(jTextField7.getText().contains("."))
{
evt.consume();
}
}
if (x < 48 || x > 57) {
evt.consume();
}
}
干杯 1)为了更快地获得更好的帮助,请发布一个。2) 事实上,这个问题的症状表明,模态对话框正是所需要的。
if(jTextField7.getText().trim().isEmpty())
{
JOptionPane.showMessageDialog(this,"Cannot be left empty","Error",JOptionPane.ERROR_MESSAGE);
return;
}
else
{
Double db= new Double(jTextField7.getText());
{
if(db==0.0)
{
JOptionPane.showMessageDialog(this,"Cannot be Zero","Error",JOptionPane.ERROR_MESSAGE);
return;
}
}
getInterest(jTextField1.getText());