我的代碼:
import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.Color;
import javax.swing.JTable;
import java.io.*;
import java.util.*;
import java.awt.Color;
import javax.swing.*;
import javax.swing.table.*;
import java.awt.Font;
import java.io.*;
import java.util.*;
import java.awt.Color;
import javax.swing.*;
import javax.swing.table.*;
import java.awt.Font;
public class students extends JFrame {
private JPanel contentPane;
private JTable table;
private DefaultTableModel m;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
students frame = new students();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public students() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 1280, 740);
contentPane = new JPanel();
contentPane.setBackground(new Color(24,24,24));
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
studentTable();
System.out.println("students();");
}
public void studentTable() {
try {
System.out.println("studentTable();");
String datafile = "data.txt";
FileReader fin = new FileReader(datafile);
DefaultTableModel m = createTableModel(fin, null);
JPanel panel = new JPanel();
panel.setBackground(new Color(35,35,35));
panel.setBounds(240, 163, 800, 360);
contentPane.add(panel);
panel.setLayout(null);
table = new JTable(m);
table.setBounds(0, 0, 800, 360);
table.getTableHeader().setFont(new Font("Arial", Font.BOLD, 12));
table.getTableHeader().setOpaque(false);
table.setBackground(new Color(35, 35, 35));
table.getTableHeader().setBackground(new Color(35,35,35));
table.setForeground(new Color(255,255,255));
table.getTableHeader().setForeground(new Color(255,255,255));
table.setRowHeight(25);
table.setFocusable(false);
table.setIntercellSpacing(new java.awt.Dimension(0, 0));
table.setRowHeight(25);
table.setSelectionBackground(new Color(32, 32, 32));
table.setShowVerticalLines(false);
table.getTableHeader().setReorderingAllowed(false);
FileWriter out = new FileWriter("data.csv");
defaultTableModelToStream(m, out);
out.close();
}
catch(Exception e) {
e.printStackTrace();
}
}
public static void defaultTableModelToStream(DefaultTableModel dtm,
Writer out) throws IOException {
System.out.println("defaultTableModelToStream();");
final String LINE_SEP = System.getProperty("line.separator");
int numCols = dtm.getColumnCount();
int numRows = dtm.getRowCount();
// Write headers
String sep = "";
for (int i = 0; i < numCols; i ) {
out.write(sep);
out.write(dtm.getColumnName(i));
sep = ",";
}
out.write(LINE_SEP);
for (int r = 0; r < numRows; r ) {
sep = "";
for (int c = 0; c < numCols; c ) {
out.write(sep);
out.write(dtm.getValueAt(r, c).toString());
sep = ",";
}
out.write(LINE_SEP);
}
}
public static DefaultTableModel createTableModel(Reader in,
Vector<Object> headers) {
System.out.println("DefaultTableModel();");
DefaultTableModel model = null;
Scanner s = null;
try {
Vector<Vector<Object>> rows = new Vector<Vector<Object>>();
s = new Scanner(in);
while (s.hasNextLine()) {
rows.add(new Vector<Object>(Arrays.asList(s.nextLine()
.split("\\s*,\\s*",
-1))));
}
if (headers == null) {
headers = rows.remove(0);
model = new DefaultTableModel(rows, headers);
} else {
model = new DefaultTableModel(rows, headers);
}
return model;
} finally {
s.close();
}
}
}
發生了什么: 該表未加載,也未加載“data.txt”。執行順序是:并且控制臺中沒有顯示崩潰或錯誤。找到文本檔案。
應該發生 的事情 JTable 應該在 JPanel 上,資料從文本檔案中提取并加載。
我試圖自己修復它,但沒有任何結果。也許有人會有解決方案。謝謝!
uj5u.com熱心網友回復:
簡短的回答是,你永遠不會添加JTable到任何東西
長答案是,嗯,要復雜得多。
null布局(像素完美布局)是現代 UI 開發中的一種錯覺,有許多因素會影響您確定和維護組件的大小和關系,從而浪費您的時間來重新發明您已經可以輕松使用的內容。
相反,花時間閱讀并學習
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Font;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
import javax.swing.JPanel;
import java.util.Arrays;
import java.util.Scanner;
import java.util.StringJoiner;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
public class Main {
public static void main(String[] args) {
new Main();
}
public Main() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
TableModel model = StudentsManager.loadFrom(new File("data.txt"));
JFrame frame = new JFrame();
frame.add(new StudentsPane(model));
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
} catch (IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
});
}
public class StudentsManager {
public static TableModel loadFrom(File file) throws IOException {
return loadFrom(file, null);
}
public static TableModel loadFrom(File file, Vector<Object> headers) throws IOException {
try (Reader is = new FileReader(file)) {
return loadFrom(is, headers);
}
}
public static TableModel loadFrom(Reader is) {
return loadFrom(is, null);
}
public static TableModel loadFrom(Reader reader, Vector<Object> headers) {
DefaultTableModel model = null;
Vector<Vector<Object>> rows = new Vector<Vector<Object>>();
Scanner s = new Scanner(reader);
while (s.hasNextLine()) {
rows.add(new Vector<Object>(Arrays.asList(s.nextLine().split("\\s*,\\s*"))));
}
if (headers == null) {
headers = rows.remove(0);
}
model = new DefaultTableModel(rows, headers);
return model;
}
public static void writeTo(DefaultTableModel dtm, File file) throws IOException {
try (Writer writer = new FileWriter(file)) {
writeTo(dtm, writer);
}
}
public static void writeTo(DefaultTableModel dtm, Writer out) throws IOException {
final String LINE_SEP = System.getProperty("line.separator");
int numCols = dtm.getColumnCount();
int numRows = dtm.getRowCount();
StringJoiner joiner = new StringJoiner(",");
for (int i = 0; i < numCols; i ) {
joiner.add(dtm.getColumnName(i));
}
out.write(joiner.toString());
out.write(LINE_SEP);
for (int r = 0; r < numRows; r ) {
joiner = new StringJoiner(",");
for (int c = 0; c < numCols; c ) {
joiner.add(dtm.getValueAt(r, c).toString());
}
out.write(joiner.toString());
out.write(LINE_SEP);
}
}
}
public class StudentsPane extends JPanel {
private JTable table;
private DefaultTableModel m;
public StudentsPane(TableModel model) {
setLayout(new BorderLayout());
setBackground(new Color(24, 24, 24));
setBorder(new EmptyBorder(50, 50, 50, 50));
table = new JTable(model);
table.setFillsViewportHeight(true);
table.getTableHeader().setFont(new Font("Arial", Font.BOLD, 12));
table.getTableHeader().setOpaque(false);
table.setBackground(new Color(35, 35, 35));
table.getTableHeader().setBackground(new Color(35, 35, 35));
table.setForeground(new Color(255, 255, 255));
table.getTableHeader().setForeground(new Color(255, 255, 255));
table.setFocusable(false);
table.setIntercellSpacing(new java.awt.Dimension(0, 0));
table.setRowHeight(25);
table.setSelectionBackground(new Color(32, 32, 32));
table.setShowVerticalLines(false);
table.getTableHeader().setReorderingAllowed(false);
add(new JScrollPane(table));
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/473165.html
