如何从数组列表中填充 jframe table?
How to fill a jframe table from an arraylist?
我有一个使用 java GUI 创建的 jtable,我需要从数组列表中进行填充。我不熟悉 java,也不知道如何填充 jTable。我不知道我是否需要使用 TableModel 或 JTable table = new JTable(data, columnNames)。这是我的代码:
public void filltable(){
ArrayList A=new ArrayList();
jframe4 j=new jframe4();
String m=j.getloggedemail();
// A=s.getEmails(m);
//this is an example of my arraylist
A.add("sender@gmail.com");
A.add("my subject");
A.add("hiiii");
try {
String[] columnNames = {"Sender",
"Subject",
"Body",
};
//here I need to fill my table
}
catch(Exception e) {
JOptionPane.showMessageDialog(null, e);
}
}
这是我需要填写的jTable1的声明:
jTable1.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null},
{null, null, null},
{null, null, null},
{null, null, null}
},
new String [] {
"Sender", "Subject", "Body"
}
));
jScrollPane1.setViewportView(jTable1);
您可以使用自定义 bean class 并指定您的数据,然后将其加载到您的 table。甚至我也做过类似的工作。我已经为你的数据修改了。
public class ListToJtable {
public static void main(String[] args) {
List<Message> messags = new ArrayList<>();
Message message = new Message("sender@gmail.com", "my subject", "hiiii");
messags.add(message);
Message message1 = new Message("sender1@gmail.com", "my subject1",
"hiiii1");
messags.add(message1);
JTable t = new JTable();
t.setModel(new javax.swing.table.DefaultTableModel(
new Object[][] {},
new String[] { "Sender", "Subject", "Body" }));
addToTable(messags, t);
JPanel panel = new JPanel();
JScrollPane scrollPane = new JScrollPane();
scrollPane.setViewportView(t);
panel.add(scrollPane);
JFrame frame = new JFrame();
frame.add(panel);
frame.setSize(500, 500);
frame.setVisible(true);
}
public static void addToTable(List<Message> messags, JTable jTable) {
for (Message message : messags) {
((DefaultTableModel) jTable.getModel()).addRow(new Object[] {
message.getSender(), message.getSubject(),
message.getBody() });
}
}
}
public class Message {
String sender;
String subject;
String body;
public Message(String a1,String a2,String a3){
sender = a1;
subject = a2;
body = a3;
}
public String getSender() {
return sender;
}
public void setSender(String sender) {
this.sender = sender;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
}
I don't know if I need to use TableModel or just JTable table = new JTable(data, columnNames)
看你的需要,你可以做任何一个。我将演示如何使用后者。如果您想使用自己的 TableModel
,请参阅@Andrew Thompson 评论中的 link。
public class Example extends JFrame {
Example() {
String[] colNames = new String[] {"Sender", "Subject", "Body"};
List<String> list = new ArrayList<>();
list.add("sender@gmail.com");
list.add("my subject");
list.add("hiiii");
list.add("sender2@gmail.com");
list.add("my subject2");
list.add("hiiii2");
String[][] rowData = new String[list.size() / colNames.length][colNames.length];
for (int i = 0; i < rowData.length; i++) {
for (int j = 0; j < rowData[i].length; j++) {
rowData[i][j] = list.get(i * colNames.length + j);
}
}
JTable table = new JTable(rowData, colNames);
add(new JScrollPane(table));
setDefaultCloseOperation(EXIT_ON_CLOSE);
pack();
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args) {
new Example();
}
}
需要注意的是,如果列表不连续包含3个元素,则不会显示整行。
我有一个使用 java GUI 创建的 jtable,我需要从数组列表中进行填充。我不熟悉 java,也不知道如何填充 jTable。我不知道我是否需要使用 TableModel 或 JTable table = new JTable(data, columnNames)。这是我的代码:
public void filltable(){
ArrayList A=new ArrayList();
jframe4 j=new jframe4();
String m=j.getloggedemail();
// A=s.getEmails(m);
//this is an example of my arraylist
A.add("sender@gmail.com");
A.add("my subject");
A.add("hiiii");
try {
String[] columnNames = {"Sender",
"Subject",
"Body",
};
//here I need to fill my table
}
catch(Exception e) {
JOptionPane.showMessageDialog(null, e);
}
}
这是我需要填写的jTable1的声明:
jTable1.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null},
{null, null, null},
{null, null, null},
{null, null, null}
},
new String [] {
"Sender", "Subject", "Body"
}
));
jScrollPane1.setViewportView(jTable1);
您可以使用自定义 bean class 并指定您的数据,然后将其加载到您的 table。甚至我也做过类似的工作。我已经为你的数据修改了。
public class ListToJtable {
public static void main(String[] args) {
List<Message> messags = new ArrayList<>();
Message message = new Message("sender@gmail.com", "my subject", "hiiii");
messags.add(message);
Message message1 = new Message("sender1@gmail.com", "my subject1",
"hiiii1");
messags.add(message1);
JTable t = new JTable();
t.setModel(new javax.swing.table.DefaultTableModel(
new Object[][] {},
new String[] { "Sender", "Subject", "Body" }));
addToTable(messags, t);
JPanel panel = new JPanel();
JScrollPane scrollPane = new JScrollPane();
scrollPane.setViewportView(t);
panel.add(scrollPane);
JFrame frame = new JFrame();
frame.add(panel);
frame.setSize(500, 500);
frame.setVisible(true);
}
public static void addToTable(List<Message> messags, JTable jTable) {
for (Message message : messags) {
((DefaultTableModel) jTable.getModel()).addRow(new Object[] {
message.getSender(), message.getSubject(),
message.getBody() });
}
}
}
public class Message {
String sender;
String subject;
String body;
public Message(String a1,String a2,String a3){
sender = a1;
subject = a2;
body = a3;
}
public String getSender() {
return sender;
}
public void setSender(String sender) {
this.sender = sender;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
}
I don't know if I need to use TableModel or just JTable table = new JTable(data, columnNames)
看你的需要,你可以做任何一个。我将演示如何使用后者。如果您想使用自己的 TableModel
,请参阅@Andrew Thompson 评论中的 link。
public class Example extends JFrame {
Example() {
String[] colNames = new String[] {"Sender", "Subject", "Body"};
List<String> list = new ArrayList<>();
list.add("sender@gmail.com");
list.add("my subject");
list.add("hiiii");
list.add("sender2@gmail.com");
list.add("my subject2");
list.add("hiiii2");
String[][] rowData = new String[list.size() / colNames.length][colNames.length];
for (int i = 0; i < rowData.length; i++) {
for (int j = 0; j < rowData[i].length; j++) {
rowData[i][j] = list.get(i * colNames.length + j);
}
}
JTable table = new JTable(rowData, colNames);
add(new JScrollPane(table));
setDefaultCloseOperation(EXIT_ON_CLOSE);
pack();
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args) {
new Example();
}
}
需要注意的是,如果列表不连续包含3个元素,则不会显示整行。