java如何显示JTable?
我已经写了一些类似这样的代码,但是运行之后,表没有显示出来。请帮帮我,我是新来的爪哇人。 这是我的代码,完整的代码
import java.awt.Dimension;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.RandomAccessFile;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
public class Invent {
DefaultTableModel dtm;
public Invent()
{
initComponents();
//readfile();
dtm = (DefaultTableModel)myjtable.getModel();
// readFile();
}
private void initComponents()
{
myjtable = new javax.swing.JTable();
JFrame f= new JFrame("InventoryDBFile");
f.setSize(800, 800);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(false);
JTextField txtitem = new JTextField(20);
txtitem.setBounds(100, 10, 100, 25);
f.add(txtitem);
JTextField txtprice = new JTextField(20);
txtprice.setBounds(100, 40, 100, 25);
f.add(txtprice);
JTextField txtquantity = new JTextField(20);
txtquantity.setBounds(100, 70, 100, 25);
f.add(txtquantity);
JTextField txtreorder = new JTextField(20);
txtreorder.setBounds(100, 100, 100, 25);
f.add(txtreorder);
JLabel l1=new JLabel("ItemName");
l1.setBounds(10, 10, 80, 20);
f.add(l1);
JLabel l2=new JLabel("Price");
l2.setBounds(10, 40, 80, 20);
f.add(l2);
JLabel l3=new JLabel("Quantity");
l3.setBounds(10, 60, 80, 20);
f.add(l3);
JLabel l4=new JLabel("ReorederLevel");
l4.setBounds(10, 90, 100, 20);
f.add(l4);
JButton btnadd=new JButton("Add");
btnadd.setBounds(10,150,60, 20);
f.add(btnadd);
f.setSize(300,400);
f.setLayout(null);
f.setVisible(true);
JButton btnupdate=new JButton("Update");
btnupdate.setBounds(80,150,60, 20);
f.add(btnupdate);
f.setSize(300,400);
f.setLayout(null);
f.setVisible(true);
JButton btndelete=new JButton("Delete");
btndelete.setBounds(150,150,60, 20);
f.add(btndelete);
f.setSize(300,400);
f.setLayout(null);
f.setVisible(true);
JButton btnlist=new JButton("Reload");
btnlist.setBounds(220,150,60, 20);
f.add(btnlist);
f.setSize(300,400);
f.setLayout(null);
f.setVisible(true);
//here i am creating the table
String[] columnNames = {"Item",
"Price",
"Quantity",
"reorderLevel",
};
Object[][] data = {
{"", "",
"", ""},
{"", "",
""},
{"", "",
"", },
{"", "",
"", },
{"", "",
"" }
};
final JTable table = new JTable(data, columnNames);
table.setPreferredScrollableViewportSize(new Dimension(100,100));
table.setFillsViewportHeight(true);
JScrollPane scroller = new JScrollPane(table);
f.add(scroller);
f.add(table);
scroller.setBounds(400, 100, 400, 300);
f.setVisible(true);
JScrollPane scrollPane = new JScrollPane(table);
f.setSize(300, 150);
f.setVisible(true);
btnadd.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnaddActionPerformed(evt);
}
}
);
btnupdate.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnupateActionPerformed(evt);
}
}
);
btndelete.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btndeleteActionPerformed(evt);
}
}
);
/* b3.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnlistActionPerformed(evt);
}
}
);
*/
}
private void btnaddActionPerformed(java.awt.event.ActionEvent evt)
{
String item = txtitem.getText();
String price = txtprice.getText();
String quantity=txtquantity.getText();
String reorder=txtreorder.getText();
try {
String filename= "C:\\WINNT\\PROFILES\\palanisamyp\\workspace\\InventoryDBInfile\\Myfile.txt";
FileWriter myfile = new FileWriter(filename,true);
PrintWriter outStream = new PrintWriter(myfile);
outStream.print(item);
outStream.print("|");
outStream.print(price);
outStream.print("|");
outStream.print(quantity);
outStream.print("|");
outStream.print(reorder);
outStream.print("\r\n");
outStream.close();
txtitem.setText("");
txtprice.setText("");
txtquantity.setText("");
txtreorder.setText("");
myfile.close();
readFile();
} catch (Exception e) {
e.printStackTrace();}
}
private void readFile()
{
BufferedReader br = null;
try {
String sCurrentLine;
br = new BufferedReader(new FileReader("C:\\WINNT\\PROFILES\\palanisamyp\\workspace\\InventoryDBInfile\\Myfile.txt"));
if (dtm.getRowCount() > 0) {
for (int i = dtm.getRowCount() - 1; i > -1; i--) {
dtm.removeRow(i);
}
}
while ((sCurrentLine = br.readLine()) != null) {
String item1=sCurrentLine.toString();
String regexp = "[|]+";
String[] lines = item1.split(regexp);
Vector v = new Vector();
String item2;
String price2;
String quantity2;
String reorder2;
item2=lines[0].toString();
price2=lines[1].toString();
quantity2=lines[2].toString();
reorder2=lines[3].toString();
v.add(item2);
v.add(price2);
v.add(quantity2);
v.add(reorder2);
dtm.toString();
dtm.addRow(v);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (br != null)br.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
private void btnupateActionPerformed(java.awt.event.ActionEvent evt1)
{
dtm = (DefaultTableModel)myjtable.getModel();
int r=myjtable.getSelectedRow();
String str=myjtable.getValueAt(r,0).toString();
String str11=myjtable.getValueAt(r,1).toString();
String str22=myjtable.getValueAt(r,2).toString();
String str33=myjtable.getValueAt(r,3).toString();
String finstr=str+"|"+str11+"|"+str22+"|"+str33;
int row=dtm.getRowCount();
try
{
RandomAccessFile r1=new RandomAccessFile("C:\\WINNT\\PROFILES\\palanisamyp\\workspace\\InventoryDBInfile\\Myfile.txt","rw");
RandomAccessFile r2=new RandomAccessFile("C:\\WINNT\\PROFILES\\palanisamyp\\workspace\\InventoryDBInfile\\TempFile.txt","rw");
FileWriter myfile = new FileWriter("C:\\WINNT\\PROFILES\\palanisamyp\\workspace\\InventoryDBInfile\\TempFile.txt",true);
PrintWriter outStream = new PrintWriter(myfile);
FileWriter myfile1 = new FileWriter("C:\\WINNT\\PROFILES\\palanisamyp\\workspace\\InventoryDBInfile\\Myfile.txt",true);
PrintWriter outStream1 = new PrintWriter(myfile1);
r2.setLength(0);
//r2.close();
String regexp = "[|]+";
for(int i=0;i<row;i++)
{
String str1=r1.readLine().trim();
String[] line = str1.split(regexp);
if(line[0].compareTo(str)!=0)
{
outStream.print(str1);
outStream.print("\r\n");
}
else
{
outStream.print(finstr);
outStream.print("\r\n");
}
}
outStream.close();
r2.seek(0);
r1.setLength(0);
for(int i=0;i<row;i++)
{
String str1=r2.readLine().trim();
outStream1.print(str1);
outStream1.print("\r\n");
}
r1.close();
r2.close();
outStream1.close();
readFile();
}
catch (IOException e) {
System.out.println(e);
}
}
private void deleteRow() {
dtm = (DefaultTableModel)myjtable.getModel();
int r=myjtable.getSelectedRow();
//System.out.println(myjtable.getValueAt(r,0));
String str=myjtable.getValueAt(r,0).toString();
//dtm.removeRow(myjtable.getSelectedRow());
int row=dtm.getRowCount();
//int col=dtm.getColumnCount();
try
{
RandomAccessFile r1=new RandomAccessFile("C:\\WINNT\\PROFILES\\palanisamyp\\workspace\\InventoryDBInfile\\Myfile.txt","rw");
RandomAccessFile r2=new RandomAccessFile("C:\\WINNT\\PROFILES\\palanisamyp\\workspace\\InventoryDBInfile\\TempFile.txt","rw");
FileWriter myfile = new FileWriter("C:\\WINNT\\PROFILES\\palanisamyp\\workspace\\InventoryDBInfile\\TempFile.txt",true);
PrintWriter outStream = new PrintWriter(myfile);
FileWriter myfile1 = new FileWriter("C:\\WINNT\\PROFILES\\palanisamyp\\workspace\\InventoryDBInfile\\Myfile.txt",true);
PrintWriter outStream1 = new PrintWriter(myfile1);
r2.setLength(0);
//r2.close();
String regexp = "[|]+";
for(int i=0;i<row;i++)
{
String str1=r1.readLine().trim();
String[] line = str1.split(regexp);
if(line[0].compareTo(str)!=0)
{
outStream.print(str1);
outStream.print("\r\n");
}
}
outStream.close();
r2.seek(0);
r1.setLength(0);
for(int i=0;i<row-1;i++)
{
String str1=r2.readLine().trim();
//String[] line = str1.split(regexp);
//if(line[0].compareTo(str)!=0)
{
outStream1.print(str1);
outStream1.print("\r\n");
}
}
r1.close();
r2.close();
outStream1.close();
readFile();
}
catch (IOException e) {
System.out.println(e);
}
}
private void btndeleteActionPerformed(java.awt.event.ActionEvent evt2){
deleteRow();
}
public static void main(String[] args) {
// TODO Auto-generated method stub
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Invent();//.setVisible(true);
}
});
}
private javax.swing.JButton btnadd=new JButton();
private javax.swing.JButton btnupdate=new JButton();
private javax.swing.JButton btndelete=new JButton();
private javax.swing.JButton btnlist=new JButton();
private javax.swing.JLabel jLabel1=new JLabel();
private javax.swing.JLabel jLabel2=new JLabel();
private javax.swing.JLabel jLabel3=new JLabel();
private javax.swing.JLabel jLabel4=new JLabel();
private javax.swing.JLabel jLabel5=new JLabel();
private javax.swing.JPanel jPanel1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTable myjtable;
private javax.swing.JTextField txtitem=new JTextField();
private javax.swing.JTextField txtprice=new JTextField();
private javax.swing.JTextField txtquantity=new JTextField();
private javax.swing.JTextField txtreorder=new JTextField();
}
# 1 楼答案
您将表格两次添加到框架和滚动窗格中。通过将用表构造的
JScrollPane
添加到框架中,它将已经显示出来。无需多次添加完成这些编辑后,将显示表格
# 2 楼答案
您永远不会将
myjtable
添加到任何其他组件。因此,它不会显示。看Table Tutorial通常,最好将JTable包装在JScrollpane中
以及将滚动窗格添加到组件: