Java 向JTable添加列时出现NullPointerException
我正在编写一个程序,在输入医生编号(FHIR HAPI)时显示患者记录,但这不是重点。我想显示基本的患者详细信息,然后通过一个复选框,允许用户向JTable添加一个额外的列来显示他们的详细信息 根据复选框的状态,可以添加和删除此额外列。但是,当我尝试使用我的Java 向JTable添加列时出现NullPointerException,java,nullpointerexception,jtable,Java,Nullpointerexception,Jtable,我正在编写一个程序,在输入医生编号(FHIR HAPI)时显示患者记录,但这不是重点。我想显示基本的患者详细信息,然后通过一个复选框,允许用户向JTable添加一个额外的列来显示他们的详细信息 根据复选框的状态,可以添加和删除此额外列。但是,当我尝试使用我的DefaultTableModel变量执行model.addColumn()方法时,我总是得到一个NullPointer异常 最后一种方法是产生问题的方法。我还为调用的其他方法提供了代码。我曾尝试对值甚至数组列表使用各种类型的数组(对象和字符
DefaultTableModel
变量执行model.addColumn()
方法时,我总是得到一个NullPointer
异常
最后一种方法是产生问题的方法。我还为调用的其他方法提供了代码。我曾尝试对值甚至数组列表使用各种类型的数组(对象和字符串)。您还将看到,在我为方法getAllPatientToServationValues()
编写的第二段代码中,我执行了一个println,以查看它是否进入该方法,而不是。任何帮助都将不胜感激
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionListener;
import java.text.ParseException;
public class GUIManager extends JFrame{
private Operations op;
private JPanel pnPnlMain;
private JPanel pnPnlTop;
private JCheckBox cbChkCholesterol;
private JPanel pnPnlMiddle;
private JTable tblLeft;
private DefaultTableModel tblLeftModel;
private JTable tblRight;
private DefaultTableModel tblRightModel;
private JButton btBtnAdd;
private JButton btBtnRemove;
private JPanel pnPnlBottom;
private JButton btBtnExit;
private JLabel lbLblTime;
private JTextField tfTxtSeconds;
private JLabel lbLblThreshhold;
private JTextField tfTxtThreshold;
public GUIManager(Operations inOP)
{
setSize(1000, 650);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("FHIR Patient Monitor");
pnPnlMain = new JPanel();
pnPnlMain.setBorder( BorderFactory.createTitledBorder( "FHIR" ) );
GridBagLayout gbPnlMain = new GridBagLayout();
GridBagConstraints gbcPnlMain = new GridBagConstraints();
pnPnlMain.setLayout( gbPnlMain );
pnPnlTop = new JPanel();
pnPnlTop.setBorder( BorderFactory.createTitledBorder( "Column Details" ) );
GridBagLayout gbPnlTop = new GridBagLayout();
GridBagConstraints gbcPnlTop = new GridBagConstraints();
pnPnlTop.setLayout( gbPnlTop );
cbChkCholesterol = new JCheckBox( "Cholesterol");
gbcPnlTop.gridx = 2;
gbcPnlTop.gridy = 1;
gbcPnlTop.gridwidth = 6;
gbcPnlTop.gridheight = 1;
gbcPnlTop.fill = GridBagConstraints.BOTH;
gbcPnlTop.weightx = 1;
gbcPnlTop.weighty = 0;
gbcPnlTop.anchor = GridBagConstraints.NORTH;
gbPnlTop.setConstraints( cbChkCholesterol, gbcPnlTop );
pnPnlTop.add( cbChkCholesterol );
gbcPnlMain.gridx = 0;
gbcPnlMain.gridy = 0;
gbcPnlMain.gridwidth = 20;
gbcPnlMain.gridheight = 4;
gbcPnlMain.fill = GridBagConstraints.BOTH;
gbcPnlMain.weightx = 1;
gbcPnlMain.weighty = 0;
gbcPnlMain.anchor = GridBagConstraints.NORTH;
gbPnlMain.setConstraints( pnPnlTop, gbcPnlMain );
pnPnlMain.add( pnPnlTop );
pnPnlMiddle = new JPanel();
pnPnlMiddle.setBorder( BorderFactory.createTitledBorder( "Tables" ) );
GridBagLayout gbPnlMiddle = new GridBagLayout();
GridBagConstraints gbcPnlMiddle = new GridBagConstraints();
pnPnlMiddle.setLayout( gbPnlMiddle );
String [][]dataTblLeft = new String[1][2];
String []colsTblLeft = new String[] { "ID", "Full Name" };
tblLeftModel = new DefaultTableModel(dataTblLeft, colsTblLeft);
tblLeft = new JTable(tblLeftModel);
tblLeftModel.removeRow(0);
JScrollPane scpLeftTable = new JScrollPane(tblLeft);
scpLeftTable.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
scpLeftTable.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
gbcPnlMiddle.gridx = 0;
gbcPnlMiddle.gridy = 0;
gbcPnlMiddle.gridwidth = 9;
gbcPnlMiddle.gridheight = 12;
gbcPnlMiddle.fill = GridBagConstraints.NONE;
gbcPnlMiddle.weightx = 1;
gbcPnlMiddle.weighty = 1;
gbcPnlMiddle.anchor = GridBagConstraints.CENTER;
gbPnlMiddle.setConstraints( scpLeftTable, gbcPnlMiddle );
pnPnlMiddle.add(scpLeftTable);
String [][]dataTblRight = new String[1][7] ;
String []colsTblRight = new String[] { "ID", "Full Name", "Birthdate","Gender","City","State","Country"};
tblRightModel = new DefaultTableModel(dataTblRight, colsTblRight);
tblRight = new JTable(tblRightModel);
tblRight.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
tblRightModel.removeRow(0);
JScrollPane scpRightTable = new JScrollPane(tblRight);
scpRightTable.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
scpRightTable.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
gbcPnlMiddle.gridx = 10;
gbcPnlMiddle.gridy = 0;
gbcPnlMiddle.gridwidth = 9;
gbcPnlMiddle.gridheight = 12;
gbcPnlMiddle.fill = GridBagConstraints.NONE;
gbcPnlMiddle.weightx = 1;
gbcPnlMiddle.weighty = 1;
gbcPnlMiddle.anchor = GridBagConstraints.CENTER;
gbPnlMiddle.setConstraints( scpRightTable, gbcPnlMiddle );
pnPnlMiddle.add( scpRightTable );
btBtnAdd = new JButton( "Add" );
gbcPnlMiddle.gridx = 2;
gbcPnlMiddle.gridy = 12;
gbcPnlMiddle.gridwidth = 5;
gbcPnlMiddle.gridheight = 2;
gbcPnlMiddle.fill = GridBagConstraints.NONE;
gbcPnlMiddle.weightx = 1;
gbcPnlMiddle.weighty = 0;
gbcPnlMiddle.anchor = GridBagConstraints.NORTH;
gbPnlMiddle.setConstraints( btBtnAdd, gbcPnlMiddle );
pnPnlMiddle.add( btBtnAdd );
btBtnRemove = new JButton( "Remove" );
gbcPnlMiddle.gridx = 12;
gbcPnlMiddle.gridy = 12;
gbcPnlMiddle.gridwidth = 5;
gbcPnlMiddle.gridheight = 2;
gbcPnlMiddle.fill = GridBagConstraints.NONE;
gbcPnlMiddle.weightx = 1;
gbcPnlMiddle.weighty = 0;
gbcPnlMiddle.anchor = GridBagConstraints.NORTH;
gbPnlMiddle.setConstraints( btBtnRemove, gbcPnlMiddle );
pnPnlMiddle.add( btBtnRemove );
gbcPnlMain.gridx = 0;
gbcPnlMain.gridy = 4;
gbcPnlMain.gridwidth = 20;
gbcPnlMain.gridheight = 15;
gbcPnlMain.fill = GridBagConstraints.BOTH;
gbcPnlMain.weightx = 1;
gbcPnlMain.weighty = 0;
gbcPnlMain.anchor = GridBagConstraints.NORTH;
gbPnlMain.setConstraints( pnPnlMiddle, gbcPnlMain );
pnPnlMain.add( pnPnlMiddle );
pnPnlBottom = new JPanel();
GridBagLayout gbPnlBottom = new GridBagLayout();
GridBagConstraints gbcPnlBottom = new GridBagConstraints();
pnPnlBottom.setLayout( gbPnlBottom );
btBtnExit = new JButton( "Exit" );
gbcPnlBottom.gridx = 16;
gbcPnlBottom.gridy = 0;
gbcPnlBottom.gridwidth = 4;
gbcPnlBottom.gridheight = 2;
gbcPnlBottom.fill = GridBagConstraints.NONE;
gbcPnlBottom.weightx = 1;
gbcPnlBottom.weighty = 0;
gbcPnlBottom.anchor = GridBagConstraints.EAST;
gbPnlBottom.setConstraints( btBtnExit, gbcPnlBottom );
pnPnlBottom.add( btBtnExit );
lbLblTime = new JLabel( "Refresh Rate:" );
gbcPnlBottom.gridx = 0;
gbcPnlBottom.gridy = 0;
gbcPnlBottom.gridwidth = 6;
gbcPnlBottom.gridheight = 1;
gbcPnlBottom.fill = GridBagConstraints.BOTH;
gbcPnlBottom.weightx = 1;
gbcPnlBottom.weighty = 1;
gbcPnlBottom.anchor = GridBagConstraints.NORTH;
gbPnlBottom.setConstraints( lbLblTime, gbcPnlBottom );
pnPnlBottom.add( lbLblTime );
tfTxtSeconds = new JTextField( );
gbcPnlBottom.gridx = 6;
gbcPnlBottom.gridy = 0;
gbcPnlBottom.gridwidth = 8;
gbcPnlBottom.gridheight = 1;
gbcPnlBottom.fill = GridBagConstraints.BOTH;
gbcPnlBottom.weightx = 1;
gbcPnlBottom.weighty = 0;
gbcPnlBottom.anchor = GridBagConstraints.WEST;
gbPnlBottom.setConstraints( tfTxtSeconds, gbcPnlBottom );
pnPnlBottom.add( tfTxtSeconds );
lbLblThreshhold = new JLabel( "Threshold:" );
gbcPnlBottom.gridx = 0;
gbcPnlBottom.gridy = 1;
gbcPnlBottom.gridwidth = 6;
gbcPnlBottom.gridheight = 1;
gbcPnlBottom.fill = GridBagConstraints.BOTH;
gbcPnlBottom.weightx = 1;
gbcPnlBottom.weighty = 1;
gbcPnlBottom.anchor = GridBagConstraints.NORTH;
gbPnlBottom.setConstraints( lbLblThreshhold, gbcPnlBottom );
pnPnlBottom.add( lbLblThreshhold );
tfTxtThreshold = new JTextField( );
gbcPnlBottom.gridx = 6;
gbcPnlBottom.gridy = 1;
gbcPnlBottom.gridwidth = 8;
gbcPnlBottom.gridheight = 1;
gbcPnlBottom.fill = GridBagConstraints.BOTH;
gbcPnlBottom.weightx = 1;
gbcPnlBottom.weighty = 0;
gbcPnlBottom.anchor = GridBagConstraints.NORTH;
gbPnlBottom.setConstraints( tfTxtThreshold, gbcPnlBottom );
pnPnlBottom.add( tfTxtThreshold );
gbcPnlMain.gridx = 0;
gbcPnlMain.gridy = 19;
gbcPnlMain.gridwidth = 20;
gbcPnlMain.gridheight = 2;
gbcPnlMain.fill = GridBagConstraints.BOTH;
gbcPnlMain.weightx = 1;
gbcPnlMain.weighty = 0;
gbcPnlMain.anchor = GridBagConstraints.NORTH;
gbPnlMain.setConstraints( pnPnlBottom, gbcPnlMain );
pnPnlMain.add( pnPnlBottom );
getContentPane().add(pnPnlMain);
}
public void addExitListener(ActionListener listen)
{
btBtnExit.addActionListener(listen);
}
public void addAddListener(ActionListener listen)
{
btBtnAdd.addActionListener(listen);
}
public void addRemoveListener(ActionListener listen)
{
btBtnRemove.addActionListener(listen);
}
public void addCholesterolListener(ActionListener listen) { cbChkCholesterol.addActionListener(listen);}
public JCheckBox getChkCholesterol() { return cbChkCholesterol;}
public DefaultTableModel getRightTableModel()
{
return this.tblRightModel;
}
public DefaultTableModel getLeftTableModel()
{
return this.tblLeftModel;
}
public JTable getLeftTable()
{
return this.tblLeft;
}
public JTable getRightTable()
{
return this.tblRight;
}
public void addRowToRightTable(Object[] newData)
{
tblRightModel.insertRow(tblRight.getRowCount(), newData);
}
public void populateLeftTable(String[][] data)
{
for(int i = 0; i < data.length; i++)
{
Object[] tempData = data[i];
tblLeftModel.insertRow(tblLeft.getRowCount(), tempData);
}
}
public void addColumnToRightTable(String code) throws ParseException {
tblRightModel.addColumn("Cholesterol",op.getAllPatientObservationValues(code));
}
}
import javax.swing.*;
导入javax.swing.table.DefaultTableModel;
导入java.awt.GridBagConstraints;
导入java.awt.GridBagLayout;
导入java.awt.event.ActionListener;
导入java.text.ParseException;
公共类GUIManager扩展了JFrame{
私人业务处;
私人JPanel PNLMAIN;
私人JPanel PNLTOP;
私人JCheckBox cbChkCholesterol;
私人JPanel PNLMIDLE;
私人JTable-tblLeft;
私有DefaultTableModel-tblLeftModel;
专用JTable tblRight;
私有DefaultTableModel tblRightModel;
私人按钮;
私人按钮btBtnRemove;
私人JPanel PNLBOTOM;
私人JButton btnexit;
私人JLabel lbLblTime;
专用JTextField tfTxtSeconds;
私人JLabel lblthreshhold;
私有JTextField tfTxtThreshold;
公共管理人员(操作不操作)
{
设置大小(1000650);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle(“FHIR患者监护仪”);
pnlmain=new JPanel();
pnlmain.setboorder(BorderFactory.createTitledBorder(“FHIR”);
GridBagLayout gbPnlMain=新的GridBagLayout();
GridBagConstraints gbcPnlMain=新的GridBagConstraints();
pnlmain.setLayout(gbPnlMain);
pnltop=新的JPanel();
pnltop.setboorder(BorderFactory.createTitledBorder(“列详细信息”);
GridBagLayout gbPnlTop=新的GridBagLayout();
GridBagConstraints gbcPnlTop=新的GridBagConstraints();
pnltop.setLayout(gbpntop);
cbChkCholesterol=新的JCheckBox(“胆固醇”);
gbcPnlTop.gridx=2;
gbcPnlTop.gridy=1;
gbcPnlTop.gridwidth=6;
gbcPnlTop.gridheight=1;
gbcPnlTop.fill=GridBagConstraints.BOTH;
gbcPnlTop.weightx=1;
gbcPnlTop.weighty=0;
gbcPnlTop.anchor=gridbagstraints.NORTH;
gbPnlTop.setConstraints(cbChkCholesterol,gbcPnlTop);
PNLTOP.add(CBCHKC胆固醇);
gbcPnlMain.gridx=0;
gbcPnlMain.gridy=0;
gbcPnlMain.gridwidth=20;
gbcPnlMain.gridheight=4;
gbcPnlMain.fill=GridBagConstraints.BOTH;
gbcPnlMain.weightx=1;
gbcPnlMain.weighty=0;
gbcPnlMain.anchor=gridbagstraints.NORTH;
gbPnlMain.setConstraints(pnltop,gbcPnlMain);
pnlmain.add(pnltop);
pnlmidle=new JPanel();
pnlmidle.setboorder(BorderFactory.createTitledBorder(“表”);
GridBagLayout GBPNLMIDLE=新的GridBagLayout();
GridBagConstraints gbcPnlMiddle=新的GridBagConstraints();
pnlmidle.setLayout(gbpnnlmiddle);
字符串[][]dataTblLeft=新字符串[1][2];
String[]colsTblLeft=新字符串[]{“ID”,“全名”};
tblLeftModel=新的DefaultTableModel(dataTblLeft,colsTblLeft);
tblLeft=新的JTable(tblLeft模型);
tBlletModel.removeRow(0);
JScrollPane scpLeftTable=新的JScrollPane(tblLeft);
scpLeftTable.setHorizontalScrollBarPolicy(ScrollPaneConstants.HorizontalScrollBar\uAlways);
scpLeftTable.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL\u SCROLLBAR\u ALWAYS);
gbcPnlMiddle.gridx=0;
gbcPnlMiddle.gridy=0;
gbcPnlMiddle.gridwidth=9;
gbcPnlMiddle.gridheight=12;
gbcPnlMiddle.fill=GridBagConstraints.NONE;
gbcPnlMiddle.weightx=1;
gbcPnlMiddle.weighty=1;
gbcPnlMiddle.anchor=GridBagConstraints.CENTER;
gbPnlMiddle.setConstraints(scpleftable,gbcPnlMiddle);
pnlmidle.add(scpLeftTable);
字符串[][]dataTblRight=新字符串[1][7];
String[]colsTblRight=新字符串[]{“ID”、“全名”、“出生日期”、“性别”、“城市”、“州”、“国家”};
tblRightModel=新的DefaultTableModel(dataTblRight,colsTblRight);
tblRight=新JTable(tblRight模型);
tblRight.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
tblRightModel.removeRow(0);
JScrollPane scpRightTable=新的JScrollPane(tblRight);
scpRightTable.setHorizontalScrollBarPolicy(ScrollPaneConstants.HorizontalScrollBar\uAlways);
scpRightTable.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL\u SCROLLBAR\u ALWAYS);
gbcPnlMiddle.gridx=10;
gbcPnlMiddle.gridy=0;
gbcPnlMiddle.gridwidth=9;
gbcPnlMiddle.gridheight=12;
gbcPnlMiddle.fill=GridBagConstraints.NONE;
gbcPnlMiddle.weightx=1;
gbcPnlMiddle.weighty=1;
gbcPnlMiddle.anchor=GridBagConstraints.CENTER;
gbPnlMiddle.setConstraints(scpRightTable、gbcPnlMiddle);
pnlmidle.add(scpRightTable);
BTNADD=新的JButton(“添加”);
gbcPnlMiddle.gridx=2;
gbcPnlMiddle.gridy=12;
gbcPnlMiddle.gridwidth=5;
gbcPnlMiddle.gridheight=2;
gbcPnlMiddle.fill=GridBagConstraints.NONE;
gbcPnlMiddl
public Object[] getAllPatientObservationValues(String code) throws ParseException {
System.out.println("In this method");
ArrayList<String> values = new ArrayList<>();
for (int i = 0; i < allPatients.size(); i++)
{
values.add(allPatients.get(i).getObservationValue(code));
}
return values.toArray();
}
public GUIManager(Operations inOP)
{
setSize(1000, 650);
public GUIManager(Operations inOP)
{
op = inOP;
setSize(1000, 650);