gpt4 book ai didi

java - 每次我使用文本字段在 Jtable 中输入条目时都会出现重复行

转载 作者:太空宇宙 更新时间:2023-11-04 13:32:11 25 4
gpt4 key购买 nike

Below is my code:

import java.awt.Container;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Iterator;
import java.util.Vector;

import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.event.TableModelEvent;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
import javax.swing.table.TableModel;

public class SalaryCalculator extends JFrame implements ActionListener {
Container cn;
JPanel pnlfirstPanel, pnlsecondPanel, pnlthirdPanel;
JLabel lbfirstName, lblastName, lbaddress1, lbaddress2, lbzip, lbssn,
lbsalaryAmount;
JTextField tafirstName, talastName, taaddress1, taaddress2, tazip, tassn,
tasalaryAmount;
JButton btnsubmit, btncalculate;
JTable tblgrid;
String[] s = { "First Name", "Last Name", "Address 1", "Address 2",
"Zip Code", "SSN", "Salary Amount" };
@SuppressWarnings("rawtypes")
Vector v= new Vector(7,7);

public SalaryCalculator() {
cn = getContentPane();
cn.setLayout(new GridLayout(2, 1));

pnlfirstPanel = new JPanel(new GridLayout(7, 2));
cn.add(pnlfirstPanel);
pnlsecondPanel = new JPanel();
cn.add(pnlsecondPanel);
//pnlthirdPanel = new JPanel();
//cn.add(pnlthirdPanel);

lbfirstName = new JLabel(" " + "First Name");
// lbfirstName.setAlignmentX(LEFT_ALIGNMENT);
pnlfirstPanel.add(lbfirstName);
pnlfirstPanel.setAlignmentX(CENTER_ALIGNMENT);
tafirstName = new JTextField();
pnlfirstPanel.add(tafirstName);
tafirstName.setSize(20, 30);

lblastName = new JLabel(" " + "Last Name");
lblastName.setAlignmentX(LEFT_ALIGNMENT);
pnlfirstPanel.add(lblastName);
talastName = new JTextField();
talastName.setBounds(30, 50, 25, 20);
pnlfirstPanel.add(talastName);

lbaddress1 = new JLabel(" " + "Address 1");
lbaddress1.setAlignmentX(LEFT_ALIGNMENT);
pnlfirstPanel.add(lbaddress1);
taaddress1 = new JTextField();
taaddress1.setBounds(30, 50, 25, 20);
pnlfirstPanel.add(taaddress1);

lbaddress2 = new JLabel(" " + "Address 2");
lbaddress2.setAlignmentX(LEFT_ALIGNMENT);
pnlfirstPanel.add(lbaddress2);
taaddress2 = new JTextField();
taaddress2.setBounds(30, 50, 5, 5);
pnlfirstPanel.add(taaddress2);

lbzip = new JLabel(" " + "Zip Code");
lbzip.setAlignmentX(LEFT_ALIGNMENT);
pnlfirstPanel.add(lbzip);
tazip = new JTextField();
tazip.setBounds(30, 50, 25, 20);
pnlfirstPanel.add(tazip);

lbssn = new JLabel(" " + "SSN");
lbssn.setAlignmentX(LEFT_ALIGNMENT);
pnlfirstPanel.add(lbssn);
tassn = new JTextField();
tassn.setBounds(30, 50, 25, 20);
pnlfirstPanel.add(tassn);

lbsalaryAmount = new JLabel(" " + "Salary Amount");
lbsalaryAmount.setAlignmentX(LEFT_ALIGNMENT);
pnlfirstPanel.add(lbsalaryAmount);
tasalaryAmount = new JTextField();
tasalaryAmount.setBounds(30, 50, 25, 20);
pnlfirstPanel.add(tasalaryAmount);

btnsubmit = new JButton("Submit".toUpperCase());
pnlsecondPanel.add(btnsubmit, -1);
btnsubmit.addActionListener(this);


tblgrid = new JTable(0, 7);
JScrollPane j= new JScrollPane(tblgrid);
tblgrid.setFillsViewportHeight(true);
pnlsecondPanel.add(tblgrid.getTableHeader());
pnlsecondPanel.add(tblgrid);
for (int i = 0; i < tblgrid.getColumnCount(); i++) {
TableColumn C1 = tblgrid.getTableHeader().getColumnModel()
.getColumn(i);
C1.setHeaderValue(s[i]);
}
setSize(600, 550);
setMinimumSize(new Dimension(600, 550));

setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}

@SuppressWarnings("unchecked")
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub

DefaultTableModel dtm= (DefaultTableModel)tblgrid.getModel();
TableModelEvent tme= new TableModelEvent(dtm);
int row= tme.getFirstRow();
int column = tme.getColumn();

String columnName= dtm.getColumnName(column);
Object data=dtm.getDataVector();

if (e.getSource()==btnsubmit){
int zip= Integer.parseInt(tazip.getText());
int ssn= Integer.parseInt(tassn.getText());
double salaryAmount= Double.parseDouble(tasalaryAmount.getText());

v.add(tafirstName.getText());
v.add(talastName.getText());
v.add(taaddress1.getText());
v.add(taaddress2.getText());
v.add(zip);
v.add(ssn);
v.add(salaryAmount);
dtm.addRow(v); // This is what i am using to enter data in table

dtm.newDataAvailable(tme);
tafirstName.setText(null);
talastName.setText(null);
taaddress1.setText(null);
taaddress2.setText(null);
tazip.setText(null);
tassn.setText(null);
tasalaryAmount.setText(null);
tblgrid.transferFocus();
System.out.println(v.capacity());
}

}

public static void main(String[] args) {
// TODO Auto-generated method stub
SalaryCalculator sc = new SalaryCalculator();

}

}

每次我单击提交按钮时,它都会在表中添加一行,并且还会更改之前添加的行。我尝试在 vector 中放置索引,但没有取得任何成功。

让我知道这个问题的解决方案是什么,因为我是 Java 新手。

最佳答案

我认为您假设 Vector(7,7) 为您提供二维结构。事实并非如此。

当您声明 Vector v = Vector(7,7); 时,您将得到一个可以包含 7 个对象的 vector ,并且该 vector 的初始容量为 7

Vector 的构造函数是

Vector(int initialCapacity, int capacityIncrement); // Constructs an empty vector with the specified initial capacity and capacity increment.

这些是将数据添加到 DefaultTableModel 的方法

void    addRow(Object[] rowData) //Adds a row to the end of the model.
void addRow(Vector rowData) //Adds a row to the end of the model.

DefaultTableModel 中的每一行都会添加每行一个新 vector

按以下方式添加您的数据:

dtm.addRow(new Vector(            
Arrays.asList( // create a Collection from given args
tafirstName.getText(),
talastName.getText() ,
taaddress1.getText() ,
taaddress2.getText() ,
zip ,
ssn ,
salaryAmount)));

关于java - 每次我使用文本字段在 Jtable 中输入条目时都会出现重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32063307/

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