У меня проблемы, я пытаюсь создать класс, который создает JFormattedTextFields, и он работает, но мне нужно получить его значение, вот когда я получил NullPointerExeption, theres - мой код:Создайте JFormattedTextField с классом
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);
}
}
Класс:
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, но я не понимаю, как это сделать.
@HovercraftFullOfEels, вы хотите узнать, какая строка номер 50? Ну, упомянутый метод 'GeraObjeto.getFtfContent' содержит только одну строку, поэтому нетрудно догадаться. И я уверен, что ваш ответ был corrent, 'getFtfContent' вызывается с' aL1C1' в качестве аргумента и нет строки, там OP инициализирует эту переменную. – Tom
@Tom: Да, я понял. Спасибо за ваш комментарий! –