本文目录导读:

我来详细解释如何使用 JEditorPane、HTMLEditorKit 来处理 HTML 表格。
基础表格显示
import javax.swing.*;
import javax.swing.text.html.*;
import java.awt.*;
public class HTMLTableExample {
public static void main(String[] args) {
JFrame frame = new JFrame("HTML Table Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(600, 400);
JEditorPane editorPane = new JEditorPane();
editorPane.setEditable(false);
editorPane.setContentType("text/html");
// 基础表格 HTML
String htmlContent = "<html><body>" +
"<table border='1' style='width:100%; text-align:center;'>" +
"<tr>" +
"<th>姓名</th>" +
"<th>年龄</th>" +
"<th>城市</th>" +
"</tr>" +
"<tr>" +
"<td>张三</td>" +
"<td>25</td>" +
"<td>北京</td>" +
"</tr>" +
"<tr>" +
"<td>李四</td>" +
"<td>30</td>" +
"<td>上海</td>" +
"</tr>" +
"</table></body></html>";
editorPane.setText(htmlContent);
JScrollPane scrollPane = new JScrollPane(editorPane);
frame.add(scrollPane);
frame.setVisible(true);
}
}
带样式的高级表格
import javax.swing.*;
import javax.swing.text.html.*;
import java.awt.*;
public class StyledHTMLTableExample {
public static void main(String[] args) {
JFrame frame = new JFrame("Styled HTML Table");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(800, 500);
JEditorPane editorPane = new JEditorPane();
editorPane.setContentType("text/html");
// 带样式和高级功能的表格
String htmlContent =
"<html><head><style>" +
"body { font-family: Arial, sans-serif; margin: 20px; }" +
"table { border-collapse: collapse; width: 100%; }" +
"th { background-color: #4CAF50; color: white; padding: 12px; " +
" border: 1px solid #ddd; }" +
"td { padding: 10px; border: 1px solid #ddd; text-align: left; }" +
"tr:nth-child(even) { background-color: #f2f2f2; }" +
"tr:hover { background-color: #ddd; }" +
"caption { font-size: 24px; margin-bottom: 15px; font-weight: bold; color: #333; }" +
"</style></head><body>" +
"<table>" +
"<caption>员工信息表</caption>" +
"<thead>" +
"<tr>" +
"<th>ID</th>" +
"<th>姓名</th>" +
"<th>职位</th>" +
"<th>薪资</th>" +
"<th>入职日期</th>" +
"</tr>" +
"</thead>" +
"<tbody>" +
"<tr><td>001</td><td>张三</td><td>开发工程师</td><td>¥15,000</td><td>2023-01-15</td></tr>" +
"<tr><td>002</td><td>李四</td><td>测试工程师</td><td>¥12,000</td><td>2023-03-20</td></tr>" +
"<tr><td>003</td><td>王五</td><td>产品经理</td><td>¥20,000</td><td>2023-02-10</td></tr>" +
"</tbody>" +
"<tfoot>" +
"<tr><td colspan='5' style='text-align:center; background-color:#f0f0f0;'>" +
"总计: 3 名员工</td></tr>" +
"</tfoot>" +
"</table></body></html>";
editorPane.setText(htmlContent);
editorPane.setEditable(false);
JScrollPane scrollPane = new JScrollPane(editorPane);
frame.add(scrollPane);
frame.setVisible(true);
}
}
动态创建表格
import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
public class DynamicTableExample extends JFrame {
private JEditorPane editorPane;
public DynamicTableExample() {
setTitle("动态表格生成");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(700, 400);
setLayout(new BorderLayout());
// 控制面板
JPanel controlPanel = new JPanel();
JButton generateBtn = new JButton("生成表格");
JSpinner rowSpinner = new JSpinner(new SpinnerNumberModel(3, 1, 10, 1));
JSpinner colSpinner = new JSpinner(new SpinnerNumberModel(4, 1, 8, 1));
controlPanel.add(new JLabel("行数:"));
controlPanel.add(rowSpinner);
controlPanel.add(new JLabel("列数:"));
controlPanel.add(colSpinner);
controlPanel.add(generateBtn);
// 编辑器
editorPane = new JEditorPane();
editorPane.setContentType("text/html");
editorPane.setEditable(false);
generateBtn.addActionListener(e -> {
int rows = (Integer) rowSpinner.getValue();
int cols = (Integer) colSpinner.getValue();
generateTable(rows, cols);
});
add(controlPanel, BorderLayout.NORTH);
add(new JScrollPane(editorPane), BorderLayout.CENTER);
setVisible(true);
}
private void generateTable(int rows, int cols) {
StringBuilder html = new StringBuilder();
html.append("<html><head><style>");
html.append("table { border-collapse: collapse; width: 100%; }");
html.append("th, td { border: 1px solid #ddd; padding: 8px; text-align: center; }");
html.append("th { background-color: #2196F3; color: white; }");
html.append("</style></head><body><table><tr>");
// 生成表头
for (int i = 0; i < cols; i++) {
html.append("<th>列 ").append(i + 1).append("</th>");
}
html.append("</tr>");
// 生成数据行
for (int i = 0; i < rows; i++) {
html.append("<tr>");
for (int j = 0; j < cols; j++) {
html.append("<td>R").append(i + 1).append("C").append(j + 1).append("</td>");
}
html.append("</tr>");
}
html.append("</table></body></html>");
editorPane.setText(html.toString());
}
public static void main(String[] args) {
SwingUtilities.invokeLater(DynamicTableExample::new);
}
}
可编辑表格
import javax.swing.*;
import javax.swing.text.*;
import javax.swing.text.html.*;
import java.awt.*;
public class EditableTableExample {
public static void main(String[] args) {
JFrame frame = new JFrame("可编辑表格");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(600, 400);
JEditorPane editorPane = new JEditorPane();
editorPane.setContentType("text/html");
editorPane.setEditable(true); // 允许编辑
// 使用 HTMLEditorKit
HTMLEditorKit kit = new HTMLEditorKit();
editorPane.setEditorKit(kit);
String htmlContent =
"<html><body>" +
"<table border='1' style='width:100%;'>" +
"<tr><th>名称</th><th>值</th></tr>" +
"<tr><td>用户名</td><td><input type='text' value='请输入用户名'/></td></tr>" +
"<tr><td>密码</td><td><input type='password'/></td></tr>" +
"<tr><td>性别</td><td>" +
"<input type='radio' name='gender' value='男'/>男" +
"<input type='radio' name='gender' value='女'/>女" +
"</td></tr>" +
"<tr><td>爱好</td><td>" +
"<input type='checkbox'/>读书 " +
"<input type='checkbox'/>运动 " +
"<input type='checkbox'/>音乐" +
"</td></tr>" +
"<tr><td>城市</td><td>" +
"<select>" +
"<option>北京</option>" +
"<option>上海</option>" +
"<option>广州</option>" +
"</select>" +
"</td></tr>" +
"</table></body></html>";
editorPane.setText(htmlContent);
JScrollPane scrollPane = new JScrollPane(editorPane);
frame.add(scrollPane);
frame.setVisible(true);
}
}
表格导出功能
import javax.swing.*;
import java.awt.*;
import java.io.*;
public class TableExportExample extends JFrame {
private JEditorPane editorPane;
public TableExportExample() {
setTitle("表格导出示例");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(600, 400);
setLayout(new BorderLayout());
editorPane = new JEditorPane();
editorPane.setContentType("text/html");
editorPane.setEditable(false);
String htmlContent =
"<html><body>" +
"<table border='1' width='80%' align='center'>" +
"<tr><th>产品</th><th>价格</th><th>库存</th></tr>" +
"<tr><td>笔记本电脑</td><td>¥5,000</td><td>100</td></tr>" +
"<tr><td>手机</td><td>¥3,000</td><td>200</td></tr>" +
"<tr><td>平板电脑</td><td>¥2,500</td><td>150</td></tr>" +
"</table></body></html>";
editorPane.setText(htmlContent);
// 导出按钮
JButton exportBtn = new JButton("导出为HTML");
exportBtn.addActionListener(e -> exportTable());
JPanel buttonPanel = new JPanel();
buttonPanel.add(exportBtn);
add(new JScrollPane(editorPane), BorderLayout.CENTER);
add(buttonPanel, BorderLayout.SOUTH);
setVisible(true);
}
private void exportTable() {
JFileChooser fileChooser = new JFileChooser();
fileChooser.setSelectedFile(new File("table.html"));
if (fileChooser.showSaveDialog(this) == JFileChooser.APPROVE_OPTION) {
try (PrintWriter writer = new PrintWriter(fileChooser.getSelectedFile())) {
writer.write(editorPane.getText());
JOptionPane.showMessageDialog(this, "表格导出成功!");
} catch (IOException ex) {
JOptionPane.showMessageDialog(this, "导出失败: " + ex.getMessage());
}
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(TableExportExample::new);
}
}
关键特性说明:
- 基础表格:使用标准 HTML
<table>- 样式支持:支持 CSS 内联样式
- 动态生成:可以通过程序动态生成表格
- 可编辑性:支持表单元素(输入框、选择器等)
- 导出功能:可以将表格内容导出为 HTML 文件
注意事项:
- JEditorPane 对 HTML 的支持有限,复杂 CSS 可能不支持
- 建议使用内联样式而非外部 CSS
- 对于复杂表格,考虑使用 JTable 替代
- HTMLEditorKit 提供了基本的 HTML 渲染功能
这些示例展示了在不同场景下使用 JEditorPane 处理 HTML 表格的方法。
版权声明:足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播