【问题标题】:JTextField#getText() returns "" for no reasonJTextField#getText() 无缘无故返回“”
【发布时间】:2021-10-27 16:13:31
【问题描述】:
class LaminaFoco extends JPanel{

JTextField cuadro1; 
JTextField cuadro2;
@Override
public void paintComponent(Graphics g) {
    super.paintComponent(g);
     setLayout(null);
     cuadro1=new JTextField();
     cuadro2=new JTextField();
     cuadro1.setBounds(120,10,150,20);
     cuadro2.setBounds(120,80,150,20);
     add(cuadro1);
     add(cuadro2);
     LanzaFocos foco=new LanzaFocos();
     cuadro1.addFocusListener(foco);
}



private class LanzaFocos extends FocusAdapter{

    @Override
    public void focusLost(FocusEvent e) {
        // TODO Auto-generated method stub
        
        String email=cuadro1.getText(); 

//剩下的代码

由于某种原因,当我运行它时,String email 的值为“”,我不明白为什么。更奇怪的是,它有时也能正常工作。

【问题讨论】:

  • 您的代码完全错误,您需要重新开始。绘画方法仅用于绘画,仅用于绘画。 1) 你不应该在 paintComponent() 方法中创建组件。每次重新绘制组件时,都会创建一个新的文本字段。 2)你也不应该创建一个监听器。阅读 Swing tutorial 了解 Swing 基础知识。在How to Use Text FieldsUsing Layout ManagersHow to Write a FocusListener 上有部分。所有部分都有工作示例。
  • 每次绘制面板时,都会创建新字段。难怪你没有从他们那里得到正确的文字。
  • 我正在关注一个教程,他们这样做是为了解释事件是如何工作的,我完全复制了他们是如何做到的,但它适用于他们而不是我,完全相同的代码,这就是困扰我的地方。
  • (1-) 那个教程 100% 错误!您已获得正确教程的链接
  • 请澄清您的具体问题或提供其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。

标签: java swing


【解决方案1】:

您应该在面板的构造函数中移动表单创建代码。 paintComponents 不是为此而设计的。

或者甚至稍微更有品味,在一个新方法中(例如protected void initContent()),然后从面板的构造函数中调用该方法。

您可能还想看看官方的挥杆示例: https://docs.oracle.com/javase/tutorial/uiswing/examples/components/index.html

具体来说,您要执行的操作与this 示例非常相似。

如果您打算制作更复杂的表格,也值得一看“ValueHolders”。


相比之下,如果你好奇 paintComponents 方法是干什么用的,它实际上是用于绘图的,如 this tutorial 所示:

public void paintComponent(Graphics g) {
    super.paintComponent(g);       
    g.drawString("This is my custom Panel!",10,20);
    redSquare.paintSquare(g);
}  

【讨论】:

  • 但我还是不明白为什么它对视频中的那个人有效,但对我无效,可能是因为视频是 6-7 岁?但是这样的事情会改变吗? idk 我是 java 新手,一般都是编码
  • @Memes 这个答案与我在原始评论中提供的答案完全相同。忘记视频,这是完全错误的。不要浪费任何时间试图理解为什么它似乎有效。而是花时间从两个不同的人提供给您的教程链接中学习正确使用摇摆的方法。
  • 好的,我会的,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-24
  • 1970-01-01
  • 1970-01-01
  • 2012-04-29
  • 2019-01-13
  • 1970-01-01
  • 2017-04-11
相关资源
最近更新 更多