gpt4 book ai didi

java - 使用类生成 JFormattedTextField

转载 作者:行者123 更新时间:2023-12-01 12:24:38 26 4
gpt4 key购买 nike

我在这里遇到麻烦了,我正在尝试创建一个创建 JFormattedTextFields 的类,它可以工作,但我需要获取它的值,那就是我得到 NullPointerExeption 的时候,这是我的代码:

JDialog:

package br.edu.faculdadedosguararapes;

import java.awt.EventQueue;

import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.border.TitledBorder;
import javax.swing.border.EtchedBorder;
import javax.swing.JFormattedTextField;
import javax.swing.SwingConstants;

import java.awt.Dialog.ModalityType;
import java.awt.FlowLayout;
import java.awt.Color;

import javax.swing.JTextField;
import javax.swing.JButton;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class Det4x4 extends JDialog {

private JFormattedTextField aL1C1;
private JFormattedTextField aL1C2;
private JFormattedTextField aL1C3;
private JFormattedTextField aL1C4;
private JFormattedTextField aL2C1;
private JFormattedTextField aL2C2;
private JFormattedTextField aL2C3;
private JFormattedTextField aL2C4;
private JFormattedTextField aL3C1;
private JFormattedTextField aL3C2;
private JFormattedTextField aL3C3;
private JFormattedTextField aL3C4;
private JFormattedTextField aL4C1;
private JFormattedTextField aL4C2;
private JFormattedTextField aL4C3;
private JFormattedTextField aL4C4;
private JTextField tfDeterminante;
private GeraObjeto textField;

public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Det4x4 dialog = new Det4x4();
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
dialog.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}

public Det4x4() {
setTitle("Matriz 4x4");
setModalityType(ModalityType.APPLICATION_MODAL);
setResizable(false);
setBounds(100, 100, 487, 362);
getContentPane().setLayout(null);

JPanel panel = new JPanel();
panel.setBorder(new TitledBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null), "Matriz", TitledBorder.CENTER, TitledBorder.TOP, null, null));
panel.setBounds(12, 12, 143, 130);
getContentPane().add(panel);
panel.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));

textField = new GeraObjeto();

textField.novoFtf(aL1C1, panel);
textField.novoFtf(aL1C2, panel);
textField.novoFtf(aL1C3, panel);
textField.novoFtf(aL1C4, panel);

textField.novoFtf(aL2C1, panel);
textField.novoFtf(aL2C2, panel);
textField.novoFtf(aL2C3, panel);
textField.novoFtf(aL2C4, panel);

textField.novoFtf(aL3C1, panel);
textField.novoFtf(aL3C2, panel);
textField.novoFtf(aL3C3, panel);
textField.novoFtf(aL3C4, panel);

textField.novoFtf(aL4C1, panel);
textField.novoFtf(aL4C2, panel);
textField.novoFtf(aL4C3, panel);
textField.novoFtf(aL4C4, panel);

JPanel panelDet = new JPanel();
panelDet.setBorder(new TitledBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null), "Determinante", TitledBorder.CENTER, TitledBorder.TOP, null, new Color(0, 0, 0)));
panelDet.setBounds(12, 169, 125, 52);
getContentPane().add(panelDet);

tfDeterminante = new JTextField();
tfDeterminante.setHorizontalAlignment(SwingConstants.CENTER);
tfDeterminante.setEditable(false);
tfDeterminante.setColumns(5);
panelDet.add(tfDeterminante);

JButton btnCalcular = new JButton("Calcular");
btnCalcular.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {

int a[][] = new int[4][4];
//CalculaDet determinante = new CalculaDet();

a[0][0] = Integer.parseInt(textField.getFtfContent(aL1C1));
/*a[0][1] = Integer.parseInt(textField.getFtfContent(aL1C2));
a[0][2] = Integer.parseInt(textField.getFtfContent(aL1C3));
a[0][3] = Integer.parseInt(textField.getFtfContent(aL1C4));
a[1][0] = Integer.parseInt(textField.getFtfContent(aL2C1));
a[1][1] = Integer.parseInt(textField.getFtfContent(aL2C2));
a[1][2] = Integer.parseInt(textField.getFtfContent(aL2C3));
a[1][3] = Integer.parseInt(textField.getFtfContent(aL2C4));
a[2][0] = Integer.parseInt(textField.getFtfContent(aL3C1));
a[2][1] = Integer.parseInt(textField.getFtfContent(aL3C2));
a[2][2] = Integer.parseInt(textField.getFtfContent(aL3C3));
a[2][3] = Integer.parseInt(textField.getFtfContent(aL3C4));
a[3][0] = Integer.parseInt(textField.getFtfContent(aL4C1));
a[3][1] = Integer.parseInt(textField.getFtfContent(aL4C2));
a[3][2] = Integer.parseInt(textField.getFtfContent(aL4C3));
a[3][3] = Integer.parseInt(textField.getFtfContent(aL4C4));*/

tfDeterminante.setText(String.valueOf(a[0][0]));

//determinante.Determinante(a[0][0], a[0][1], a[0][2], a[1][0], a[1][1], a[1][2], a[2][0], a[2][1], a[2][2],
// tfDiagonalPrincipal, tfDiagonalSecundaria, tfDeterminante);
}
});

btnCalcular.setBounds(187, 154, 99, 23);
getContentPane().add(btnCalcular);

JButton btnLimpar = new JButton("Limpar");
btnLimpar.setBounds(187, 189, 99, 23);
getContentPane().add(btnLimpar);


}
}

类(class):

package br.edu.faculdadedosguararapes;

import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

import javax.swing.JFormattedTextField;
import javax.swing.JPanel;
import javax.swing.SwingConstants;

public class GeraObjeto {

public JFormattedTextField novoFtf(JFormattedTextField nome, JPanel panel, int bound1, int bound2){
nome = new JFormattedTextField();
nome.setBounds(bound1, bound2, 22, 20);
nome.setHorizontalAlignment(SwingConstants.CENTER);
nome.setColumns(2);
nome.addKeyListener(new KeyAdapter() {
@Override
public void keyTyped(KeyEvent arg0) {
char c = arg0.getKeyChar();
if (!(Character.isDigit(c) || (c==KeyEvent.VK_BACK_SPACE) || c==KeyEvent.VK_DELETE || Character.toString(c).equals("-"))){
arg0.consume();
}
}
});

panel.add(nome);
return nome;
}

public JFormattedTextField novoFtf(JFormattedTextField nome, JPanel panel){
nome = new JFormattedTextField();
nome.setHorizontalAlignment(SwingConstants.CENTER);
nome.setColumns(2);
nome.addKeyListener(new KeyAdapter() {
@Override
public void keyTyped(KeyEvent arg0) {
char c = arg0.getKeyChar();
if (!(Character.isDigit(c) || (c==KeyEvent.VK_BACK_SPACE) || c==KeyEvent.VK_DELETE || Character.toString(c).equals("-"))){
arg0.consume();
}
}
});

panel.add(nome);
return nome;
}

public String getFtfContent(JFormattedTextField nome){
return nome.getText();
}

}

只是为了测试,我评论了一些行,并尝试获取其中一个文本字段的值,但我得到了:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at br.edu.faculdadedosguararapes.GeraObjeto.getFtfContent(GeraObjeto.java:50)
at br.edu.faculdadedosguararapes.Det4x4$2.actionPerformed(Det4x4.java:110)

我确定我需要的是创建一个方法来设置 JFT 的值,但我现在不知道如何设置。

最佳答案

您正在创建一个新的 JFormattedTextField,但您没有将新对象分配给您的类所保存的变量,因此所有变量均为 null。事实上,您将该对象分配给 novoFtf 方法的参数,该方法不会自动将其分配给该类持有的 JFormattedTextField 变量。我想你可以这样做:

aL1C1 = textField.novoFtf(aL1C1, panel);

其他问题:

  • 您的代码似乎过于复杂,使得调试变得困难。我会重构和简化。
  • 如果您需要字段网格,请使用数组或 ArrayList,这将有助于简化我上面的建议。
  • 您正在使用 setBounds 和 null 布局。我建议您不要这样做,因为这会导致 GUI 非常不灵活,虽然它们在一个平台上看起来不错,但在大多数其他平台或屏幕分辨率上看起来很糟糕,而且很难更新和维护。相反,您需要研究和学习布局管理器,然后嵌套 JPanel,每个 JPanel 使用自己的布局管理器来创建在所有操作系统上看起来都不错的令人愉悦且复杂的 GUI。
  • 例如,您的矩阵字段应由使用 4 x 4 GridLayout 的 JPanel 保存,并且可以将此 JPanel 放入使用 GridBagLayout 的主 JPanel 中。
  • 避免将 KeyListener 与 JTextComponent(例如 JTextField 或 JFormattedTextField)一起使用,因为这可能会导致严重且难以调试的问题。还有更好的方法来做这类事情,包括使用 DocumentListener、DocumentFilter、InputVerifier...

关于java - 使用类生成 JFormattedTextField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26455126/

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