[英]How Can I Show My Doubly LinkedList Data in a JTable?
我一直在寻找有关如何将链接列表数据添加到Jtable的许多小时,但是我发现的结果都不令人满意。 我试图自学Java,所以对我来说有点困难。 无论如何,这是我的代码。 我知道这可能真的很糟糕,所以请耐心等待我,并帮助我改善它。
public class node {
public node next,pre;
public String name;
public double price;
public node (String n,double p){
this (n,p,null,null);
}
public node (String n,double p, node ne,node pr){
name = n;
price = p;
next = ne;
pre = pr;
}
}
public class list {
public node head, tail;
public list (){
head = tail = null;
}
public void addHead (String n,double p){
if (head != null){
head = new node (n,p,head, null);
head.next.pre = head;
}
else
head = tail = new node (n,p);
}
public int size (){
int size = 0;
for(node n = head; n.next != null; n = n.next)
size++;
return size;
}
public String print (){
String s = "";
if (head !=null){
for (node p = head; p !=null; p = p.next)
return p.name +"\t"+ p.price;
}
return s;
}
}
我不知道在getValueAt方法中写什么
import javax.swing.*;
import java.awt.*;
import javax.swing.event.*;
import java.awt.event.*;
import javax.swing.table.*;
class gui extends JFrame implements ActionListener {
list li = new list ();
JButton ad;
JTextField t,t1;
JTextField t2;
JTable table = new JTable (new table_model());
public gui (){
setSize(500,500);
setTitle("DEMO");
setLocationRelativeTo(null);
setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
setLayout(new GridLayout(2,2));
t = new JTextField ("");
add(t);
t1 = new JTextField ("");
add(t1);
ad = new JButton ("add");
ad.addActionListener(this);
add(ad);
add(table);
}
public class table_model extends AbstractTableModel {
public list data;
String [] columns = {"Name","Price",
};
public void addList (list data){
this.data = data;
}
public int getColumnCount() {
return columns.length;
}
public int getRowCount() {
return data.size();
}
public String getColumnName(int col) {
return columns[col];
}
public Object getValueAt(int row, int col)
{
}
}
public void actionPerformed (ActionEvent e){
if (e.getSource() == ad && !t.equals("")){
li.addHead(t.getText(),Integer.parseInt(t1.getText()));
}
}
}
class test{
public static void main (String [] aed){
gui g = new gui();
g.setVisible (true);
}
}
我绝对建议您使用java.util
包中的LinkedList类,而不是自己实现。 如果使用Java的LinkedList,则它将具有方法T get(int index)
,该方法将返回指定索引处的元素。 然后,您要做的就是将对象属性映射到正确的列。
class MyObj {
public String name;
public double price;
}
class MyTableModel extends AbstractTableModel {
private List<MyObj> contents;
public MyTableModel(List<MyObj> contents){
this.contents = contents;
}
@Override
public int getRowCount(){
return this.contents.size();
}
@Override
public int getColumnCount(){
return 2;
}
@Override
public Object getValueAt(int row, int column){
MyObj myObj = contents.get(row);
//map column index to property
return (column == 0)? myObj.name : myObj.price;
}
}
这不需要专门的LinkedList。 所有必需的方法都在List接口中定义,该接口当然是LinkedList
类所实现的。 如果必须使用自己的LinkedList实现,则还应该实现List接口。 这将使您的实现可在需要列表的任何地方使用。 然后,您将编程到一个接口 ,而不是一个实现。
通过链表中的索引访问元素需要O(n)操作。
JTable需要这种访问。
链表的getValueAt
大致如下:从表头开始,前进k-1
次到下一个条目,然后返回结果值。 显然,这对于大型数据集来说并不快。
换句话说: 不要使用链接的列表模式 ,而是基于阵列的模型,对表 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.