重新打开NetBeans后,在运行JavaSwingJFrame时,文本字段变得没有响应



我在NetBeans中使用JavaSwing创建了一个JFrame表单。它包含一些文本字段、一些组合框和一个导航到下一个表单的按钮。在我关闭并重新打开NetBeans之前,一切都很好。现在,当我运行表单时,只有文本字段没有响应。组合框和按钮工作正常。我尝试在文本字段中使用setEdit()、setFocusable()和requestFocusinDow(),但输出没有改变。请帮帮我。

package Hora.GUI;
import java.awt.Color; 
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class InputJFrame3 extends javax.swing.JFrame
{
    public InputJFrame3()
    {
        initComponents();
        numberJTextField.addMouseListener(new MouseAdapter() 
                                          {
                                              public void mouseClicked(MouseEvent e)
                                              {
                                              numberJTextField.setForeground(Color.black);
                                              }
                                          });
    }
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {
    numberJLabel = new javax.swing.JLabel();
    numberJTextField = new javax.swing.JTextField();
    nextJButton = new javax.swing.JButton();
    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
    setTitle("HORA");
    setFocusableWindowState(false);
    numberJLabel.setText("Number");
    nextJButton.setText("next >");
    nextJButton.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            nextJButtonActionPerformed(evt);
        }
    });
    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addContainerGap()
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addComponent(nextJButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGroup(layout.createSequentialGroup()
                    .addComponent(numberJLabel)
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                    .addComponent(numberJTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGap(0, 0, Short.MAX_VALUE)))
            .addContainerGap())
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addContainerGap()
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(numberJLabel)
                .addComponent(numberJTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
            .addComponent(nextJButton)
            .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
    );
    pack();
}// </editor-fold>//GEN-END:initComponents
    private void nextJButtonActionPerformed(java.awt.event.ActionEvent evt)
    {
        //GEN-FIRST:event_nextJButtonActionPerformed
        number=Integer.parseInt(numberJTextField.getText());
        Boolean mistake=false;
        if(number<1 || number>249)
        {
            mistake=true;
            numberJTextField.setForeground(Color.red);
        }
        if(!mistake)
            setVisible(false);
    }//GEN-LAST:event_nextJButtonActionPerformed
    public int getNumber()
    {
        return number;
    }
    private int number;
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton nextJButton;
    private javax.swing.JLabel numberJLabel;
    private javax.swing.JTextField numberJTextField;
    // End of variables declaration//GEN-END:variables
}

package Hora.GUI;
public class Run
{
    public static void main(String[] args)
    {
        java.awt.EventQueue.invokeLater(new Runnable()
        {
            public void run() 
            {
                InputJFrame3 frame = new InputJFrame3();
                frame.setVisible(true);
            }
        });
    }
}

您的问题在这里:

setFocusableWindowState(false);

这样做会阻止JTextField获得焦点并可用。我建议你不要这样做。

此外,我同意camickr的观点,即您不应该使用IDE来创建sscce。只需将您的组件添加到一个简单的JPanel中,该JPanel默认使用FlowLayout,类似于:

  nextJButton.setText("next >");
  nextJButton.addActionListener(new java.awt.event.ActionListener() {
     public void actionPerformed(java.awt.event.ActionEvent evt) {
        nextJButtonActionPerformed(evt);
     }
  });
  JPanel panel = new JPanel();
  panel.add(numberJLabel);
  panel.add(numberJTextField);
  panel.add(otherJTextField);
  panel.add(nextJButton);
  getContentPane().add(panel);
  pack();
}// </editor-fold>//GEN-END:initComponents

此外,您的程序看起来好像在交换JFrame,而JFrame通常被认为是一种弱设计。相反,将代码设置为创建JPanel"视图",并使用CardLayout交换GUI视图。如果必须显示详细信息窗口,请使用JDialog。


编辑2
您在评论中表示:

但这部分在生成的代码中。我在写字板中打开了java文件并对其进行了修改。它现在可以工作了。使用IDE还有其他方法吗?非常感谢Hovercraft先生和Camickr先生的帮助。我为爷爷做这个业余项目,他想自动化他的占星术计算。

我认为可以公平地说,这个网站上的大多数主要Swing顾问(至少是我熟悉的那些)都是手工创建Swing代码的。不要误解我的意思,我们使用IDE,但在创建Swing代码时,我们不使用IDE的拖放工具。Swing教程将帮助您学习如何做到这一点。特别是,请参阅第一课:在容器中布置组件一节。

请注意,即使您最终使用了Swing代码生成器,如NetBeans的Matisse工具,学习如何进行手工编码也不会对您造成伤害,因为所获得的知识将直接适用于您使用代码生成工具的工作。

相关内容

  • 没有找到相关文章