gpt4 book ai didi

java - 重新打开 NetBeans 后运行 Java Swing JFrame 时文本字段变得无响应

转载 作者:行者123 更新时间:2023-11-30 04:18:52 25 4
gpt4 key购买 nike

我在 NetBeans 中使用 Java Swing 创建了一个 JFrame 表单。它包含一些文本字段、一些组合框和一个用于导航到下一个表单的按钮。一切正常,直到我关闭并重新打开 NetBeans。现在,当我运行表单时,只有文本字段变得无响应。组合框和按钮工作正常。我尝试将 setEditable()、setFocusable() 和 requestFocusinWindow() 与文本字段一起使用,但输出没有改变。请帮我。

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 。只需将组件添加到默认使用 FlowLayout 的简单 JPanel 中,如下所示:

  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。相反,调整您的代码来创建 JPanel“ View ”并让 GUI 与 CardLayout 交换 View 。如果必须显示详细信息窗口,请使用 JDialog。

<小时/>

编辑2
您在评论中指出:

But that part is in the generated code. I opened the java file in Wordpad and modified it. It works now. Is there any other way to do it using the IDE? Thanks a lot Mr. Hovercraft and Mr. Camickr for helping me out. I'm doing this a hobby project for my grandpa who wants to automate his astrology calculations.

我认为可以公平地说,该网站上的大多数主要 Swing 顾问(至少是我熟悉的顾问)都是手动创建 Swing 代码的。不要误会我的意思,我们使用 IDE,但我们在创建 Swing 代码时不使用 IDE 的拖放工具。 Swing Tutorials将帮助您学习如何做到这一点。特别请看一下Lesson: Laying Out Components Within a Container这部分。

请注意,即使您最终使用了 Swing 代码生成器(例如 NetBeans 的 Matisse 工具),学习如何进行一些手动编码也不会影响您,因为所获得的知识将直接适用于您使用代码的工作-生成工具。

关于java - 重新打开 NetBeans 后运行 Java Swing JFrame 时文本字段变得无响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17640403/

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