自定义JtextField proprety

时间:2018-05-14 09:50:33

标签: java

我已经创建了一个自定义JtextField,但是当我在主JFrame中调用它时,任何预定义的方法都不像getText或SetText那样工作。

import javax.swing.JTextField;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

public class JTextFieldDecimal extends JTextField {
    private static final long serialVersionUID = 1L;
public JTextFieldDecimal()
{
    super();
    addKeyListener(new KeyAdapter() {
        @Override
        public void keyTyped(KeyEvent e) {
            char c =e.getKeyChar();
            if(!((c>='0') && (c<='9') || 
                    (c==KeyEvent.VK_BACK_SPACE) ||
                    (c==KeyEvent.VK_DELETE)))
            {
                getToolkit().beep();
                e.consume();
            }

        }
    });

}
}

enter image description here

当我点击jframe中的验证按钮时,编译器会给我一个错误并指向第98行,其中包含我的自定义JtextField的语句参数名为 txtPrixHT

btnValider.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
            Connection cn=null;
            PreparedStatement pst =null;
            ResultSet rs=null;
            try {
                Class.forName("com.mysql.jdbc.Driver");
                cn=DriverManager.getConnection("jdbc:mysql://localhost/gesticom", "root","");
                //String sqlAdd ="insert into produit (PrCodeBarre,PrDesignation,PrPrixHT,PrRemise,PrPrixAchat,PrStockAlerte,PrStockReel) values (?,?,?,?,?,?,?)";
                String sqlAdd ="insert into produit (PrCodeBarre,PrDesignation,PrPrixHT) values (?,?,?)";
                pst=cn.prepareStatement(sqlAdd,Statement.RETURN_GENERATED_KEYS);
                pst.setString(1, txtCodebarre.getText());
                pst.setString(2, txtDesignation.getText());
                pst.setString(3,txtPrixHT.getText());
                pst.execute();
                rs=pst.getGeneratedKeys();
                if(rs.next())
                {
                    txtIdprod.setText(rs.getString(1));
                    JOptionPane.showMessageDialog(null, "Nouveau Produit créé", "Fournisseur",JOptionPane.INFORMATION_MESSAGE);
                }
            } catch (ClassNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            finally {
                try
                {
                    cn.close();
                    pst.close();
                }
                catch (SQLException e)
                {
                    e.printStackTrace();
                }
            }
            }
        });

1 个答案:

答案 0 :(得分:1)

对于格式化文本字段的替代方法,我建议您不要尝试自己验证输入。您可以使用JFormattedTextField,以便在焦点丢失时为您执行此操作。这是一个快速示例

JFormattedTextField decimalTxt = new JFormattedTextField(
    new NumberFormatter()
);

这将使用JVM的Locale格式化预期的数字(对于十进制值更简单)。如果只想采用整数,请提供整数格式

JFormattedTextField decimalTxt = new JFormattedTextField(
    new NumberFormatter(
        NumberFormat.getIntegerInstance()
    )
);

您希望始终有两个十进制数字,例如5.00,请在NumberFormat中定义:

NumberFormat nf = NumberFormat.getNumberInstance();
nf.setMinimumFractionDigits(2);

JFormattedTextField decimalTxt = new JFormattedTextField(
    new NumberFormatter(nf)
);

您可以在How to Use Formatted Text Fields

上找到有关此内容的更多信息