我正在写一个图形用户界面,显示800学生的表格,学生的信息从txt文件中读取。我编写了Screen()类和StudentTable()类,其中Screen类具有带两个JPanel选项卡“PList”和“PChart”的TabbedPane。我想将我的StudentTable类添加到我的PList JPanel中。所以当我运行Screen类时,它将显示里面有学生表的StudentTable类。通常情况下,我设法显示我的表没有标签。 首先,我打开“Students.txt”文件,然后阅读文件。然后我关闭了文件。之后,我创建了一个void方法createTable(),它创建表格。该表从ArrayList获取信息。现在,我想将这个类添加到我的PList JPanel。代码有点长。所以我上传了他们。但是,如果你想让我分享代码,我也可以。
Screen.java如何将JTable添加到JTabbedPane中?
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
public class Screen extends JFrame implements ActionListener {
private JTabbedPane tabbedPane;
private JPanel PList, PChart;
private JMenuBar menuBar;
private JMenu menuStudent, menuSort, menuFilter;
private JMenuItem addStudent, removeStudent, removeAllStudents;
private JMenuItem sortLastName, sortId, sortAverage;
private JMenuItem filterLetterGrade, removeFilter;
private StudentTable studentTable;
public Screen() {
// TODO Auto-generated constructor stub
tabbedPane = new JTabbedPane();
menuBar = new JMenuBar();
menuStudent = new JMenu();
menuSort = new JMenu();
menuFilter = new JMenu();
addStudent = new JMenuItem();
removeStudent = new JMenuItem();
removeAllStudents = new JMenuItem();
sortLastName = new JMenuItem();
sortId = new JMenuItem();
sortAverage = new JMenuItem();
filterLetterGrade = new JMenuItem();
removeFilter = new JMenuItem();
PList = new JPanel();
PChart = new JPanel();
studentTable = new StudentTable();
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
setExtendedState(MAXIMIZED_BOTH);
setTitle("Screen");
setLayout(new BorderLayout());
setJMenuBar(menuBar);
// Menu
menuStudent.setText("Student");
addStudent.setText("Add Student");
addStudent.addActionListener(this);
removeStudent.setText("Remove Student");
removeStudent.addActionListener(this);
removeAllStudents.setText("Remove All Students");
removeAllStudents.addActionListener(this);
menuStudent.add(addStudent);
menuStudent.add(removeStudent);
menuStudent.add(removeAllStudents);
menuSort.setText("Sort");
sortLastName.setText("Sort by last name");
sortLastName.addActionListener(this);
sortId.setText("Sort by ID");
sortId.addActionListener(this);
sortAverage.setText("Sort by average");
sortAverage.addActionListener(this);
menuSort.add(sortLastName);
menuSort.add(sortId);
menuSort.add(sortAverage);
menuFilter.setText("Filter");
filterLetterGrade.setText("Filter by letter grade");
filterLetterGrade.addActionListener(this);
removeFilter.setText("Remove filter");
removeFilter.addActionListener(this);
menuFilter.add(filterLetterGrade);
menuFilter.add(removeFilter);
menuBar.add(menuStudent);
menuBar.add(menuSort);
menuBar.add(menuFilter);
// Tabs
tabbedPane.add("List", PList);
tabbedPane.add("Chart", PChart);
add(tabbedPane);
PList.add(studentTable);
}
public static void main(String[] args) {
new Screen();
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
}
}
StudentTable.java
import java.net.URL;
import java.util.ArrayList;
import java.util.Scanner;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
public class StudentTable extends JPanel {
private static JTable table;
private String name, lastName, letterGrade;
private long studentId;
private double quiz1,quiz2,project,midterm,finalGrade,average;
private static ArrayList<Students> studentList;
private Scanner scanner;
public StudentTable() {
}
/**
*
* @param name
* @param lastName
* @param studentId
* @param quiz1
* @param quiz2
* @param project
* @param midterm
* @param finalGrade
* @param average
* @param letterGrade
*/
public StudentTable(String name, String lastName, long studentId, double quiz1, double quiz2, double project, double midterm, double finalGrade, double average, String letterGrade) {
this.name = name;
this.lastName = lastName;
this.letterGrade = letterGrade;
this.studentId = studentId;
this.quiz1 = quiz1;
this.quiz2 = quiz2;
this.project = project;
this.midterm = midterm;
this.finalGrade = finalGrade;
this.average = average;
}
// GET & SET METHODS
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getLetterGrade() {
return letterGrade;
}
public void setLetterGrade(String letterGrade) {
this.letterGrade = letterGrade;
}
public long getStudentId() {
return studentId;
}
public void setStudentId(long studentId) {
this.studentId = studentId;
}
public double getQuiz1() {
return quiz1;
}
public void setQuiz1(double quiz1) {
this.quiz1 = quiz1;
}
public double getQuiz2() {
return quiz2;
}
public void setQuiz2(double quiz2) {
this.quiz2 = quiz2;
}
public double getProject() {
return project;
}
public void setProject(double project) {
this.project = project;
}
public double getMidterm() {
return midterm;
}
public void setMidterm(double midterm) {
this.midterm = midterm;
}
public double getFinalGrade() {
return finalGrade;
}
public void setFinalGrade(double finalGrade) {
this.finalGrade = finalGrade;
}
public double getAverage() {
return average;
}
public void setAverage(double average) {
this.average = average;
}
public ArrayList<Students> getStudentList() {
return studentList;
}
public void setStudentList(ArrayList<Students> studentList) {
this.studentList = studentList;
}
// Opening "Students.txt" file from a url.
public void openFile() {
try {
URL url = new URL("http://rawsly.com/Students.txt");
scanner = new Scanner(url.openStream());
} catch (Exception e) {
// TODO: handle exception
System.out.println("Error: " + e.getMessage());
}
}
// Reading "Students.txt" file and adding students to the "studentList" ArrayList.
public void readFile() {
studentList = new ArrayList<>();
while(scanner.hasNext()) {
name = scanner.next();
lastName = scanner.next();
studentId = scanner.nextLong();
quiz1 = scanner.nextDouble();
quiz2 = scanner.nextDouble();
project = scanner.nextDouble();
midterm = scanner.nextDouble();
finalGrade = scanner.nextDouble();
average = scanner.nextDouble();
letterGrade = scanner.next();
studentList.add(new Students(name, lastName, studentId, quiz1, quiz2, project, midterm, finalGrade, average, letterGrade));
}
}
// Closing "Students.txt" file.
public void closeFile() {
scanner.close();
}
public void createTable() {
openFile();
readFile();
closeFile();
String [] columnNames = {"NAME", "SURNAME", "ID", "QUIZ1", "QUIZ2", "PROJECT", "MIDTERM", "FINAL", "AVERAGE", "LETTER GRADE"};
Object [][] data = new Object[studentList.size()][10];
for(int i=0; i<studentList.size(); i++) {
for(int j=0; j<10; j++) {
switch (j) {
case 0:
data[i][0] = studentList.get(i).getName();
break;
case 1:
data[i][1] = studentList.get(i).getLastName();
break;
case 2:
data[i][2] = studentList.get(i).getStudentId();
break;
case 3:
data[i][3] = studentList.get(i).getQuiz1();
break;
case 4:
data[i][4] = studentList.get(i).getQuiz2();
break;
case 5:
data[i][5] = studentList.get(i).getProject();
break;
case 6:
data[i][6] = studentList.get(i).getMidterm();
break;
case 7:
data[i][7] = studentList.get(i).getFinalGrade();
break;
case 8:
data[i][8] = studentList.get(i).getAverage();
break;
case 9:
data[i][9] = studentList.get(i).getLetterGrade();
break;
} // end of the switch
} // end of the first for loop
} // end of the second for loop
table = new JTable(data,columnNames) {
public boolean isCellEditable(int row, int column) { // To make row and columns not editable
return false;
}
};
table.setFillsViewportHeight(true);
table.setAutoCreateRowSorter(true); // to activate sorting property of each column
}
public static void main(String[] args) {
StudentTable s = new StudentTable();
s.createTable();
}
}
请将您的代码发布在问题中。其次,你对创建的JTable没有做任何事情,所以至少在StudentTable中添加一个getter,用它来获取'Screen'中的'JTable',并将JTable'添加到适当的面板中。第三,重新思考你的代码两次,其中有许多不好的事情。 –
好的,我会再次处理它。感谢您的建议。 :) – rawsly
我看到你正在用'PList.add(studentTable);'来添加表格。究竟是什么问题? – c0der