gpt4 book ai didi

java - 自定义 JtextField 属性

转载 作者:行者123 更新时间:2023-12-02 11:15:12 25 4
gpt4 key购买 nike

我创建了一个自定义 JtextField但是当我在 main 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 Produit 中的验证按钮时,编译器给出一个错误并指向第 98 行,其中包含名为 txtPrixHT 的自定义 JtextField 的语句参数。

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();
}
}
}
});

最佳答案

对于格式化文本字段的替代方案,我建议您不要尝试自己验证输入。您可以使用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上找到更多相关信息。

关于java - 自定义 JtextField 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50327466/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com