如何在java开发的窗体下插入一个了填写的无限表格?就像excel表一样?最好能直接插入一个excel表,谢谢大神们了,我是新手好多东西都不懂,希望大神们最好直接发代码,谢谢啦,窗体如下。
package com;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.LinkedList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableModel;
public class NoPortWindow extends JFrame implements ActionListener {
// 存储表格信息
// 设置主窗口长和宽
private static final int WINDOWWIDE = 600;
private static final int WINDOWHIGH = 420;
// 主窗口对象、右侧图表格式、图表对象
private JFrame frame = new JFrame();
private DefaultTableModel tableModel;
private JTable table = null;
// txt文件对象
private File file1 = null;
// 标题控件
private JLabel jText = null;
// 两个文本输入框(输入IP范围)
private JTextField jTextStart = null;
private JTextField jTextEnd = null;
// 两个按钮控件(获取IP、端口、mac地址信息;输出txt文件)
private JButton getItemsBtn = null;
private JButton outputBtn = null;
// 保存所有的信息条,保存单个信息条
private List<LinkedList<String>> strList = new LinkedList<LinkedList<String>>();
private LinkedList<String> infoList = null;
// 主窗口构造方法
public NoPortWindow() {
this.liftInformation();// 左侧交互面板
this.rigthInformation();// 右侧图表显示面板
// 设置主窗口名
PublicWindowSet.windowAttribute(this, WINDOWWIDE, WINDOWHIGH, "信息查询");
}
// 左边窗口交互栏
public void liftInformation() {
// 1).添加一个文本标签
jText = new JLabel("请输入IP范围");
jText.setFont(new Font("宋体", Font.BOLD, 16));
jText.setBounds(30, 40, 230, 50);
this.add(jText);
// 2).两个文本输入框
jTextStart = new JTextField();
jTextEnd = new JTextField();
jTextStart.setFont(new Font("宋体", Font.BOLD, 16));
jTextEnd.setFont(new Font("宋体", Font.BOLD, 16));
jTextStart.setBounds(30, 80, 120, 25);
jTextEnd.setBounds(30, 110, 120, 25);
this.add(jTextStart);
this.add(jTextEnd);
// 3).两个操作按钮
getItemsBtn = new JButton("获取信息");
outputBtn = new JButton("导出txt");
getItemsBtn.setBounds(30, 200, 120, 25);
outputBtn.setBounds(30, 230, 120, 25);
this.add(getItemsBtn);
this.add(outputBtn);
// 添加监听响应
this.getItemsBtn.addActionListener(this);
this.outputBtn.addActionListener(this);
// 4).设置左右分隔标签
JLabel awayLabel = new JLabel();
awayLabel.setBounds(200, 50, 10, 450);
this.add(awayLabel);
}
// 右部列表信息
public void rigthInformation() {
// 设置JTabel的默认类型(数据来源、图表标题)
this.tableModel = new DefaultTableModel(new infoList().Info, new infoList().titles);
// 添加JLabel组件
this.table = new JTable(this.tableModel);
// 设置列宽度
table.getColumnModel().getColumn(0).setPreferredWidth(80);
table.getColumnModel().getColumn(1).setPreferredWidth(150);
table.getColumnModel().getColumn(2).setPreferredWidth(190);
// 禁止JLabel组件随着窗口的大小而改变
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
// JTabel组件表格的显示尺寸
table.setPreferredScrollableViewportSize(new Dimension(420, 0));
// 使列表不可以整列的进行移动
table.getTableHeader().setReorderingAllowed(false);
// 使列表框可被编辑
table.enable(true);
// 给JTabel组件添加滑动条
JScrollPane scr = new JScrollPane(this.table);
// 将带滚动条的Tabel组件添加入面板的东部区域
this.add(scr, BorderLayout.EAST);
}
// 图表数据信息
class infoList extends AbstractTableModel {
// 标题
public String[] titles = { "主机名", "IP号", "MAC地址" };
// 数据
public Object[][] Info = {}; //
public int getRowCount() {
return 0;
}
public int getColumnCount() {
return 0;
}
@Override
public Object getValueAt(int arg0, int arg1) {
return null;
}
}
// 监听按钮响应方法
public void actionPerformed(ActionEvent e) {
// 1).“获取信息”按钮响应处理
if (e.getSource() == this.getItemsBtn) {
// 获取文本起始IP地址
String start = jTextStart.getText();
String end = jTextEnd.getText();
getinfo(start, end, this);
}
// 2)."输出"响应按钮
if (e.getSource() == this.outputBtn) {
try {
file1 = new File("信息.txt");
OutputStream outstream = new FileOutputStream(file1);
outstream.write("主机名 IP号 MAC地址\n".getBytes());
// 按行输出信息(信息间隔为空格)
for (int rowNum = 0; rowNum < strList.size(); rowNum++) {
String StrLine = strList.get(rowNum).get(0) + " " + strList.get(rowNum).get(1) + " "
+ strList.get(rowNum).get(2) + "\n";
outstream.write(StrLine.getBytes());
}
// 刷新、关闭输出流
outstream.flush();
outstream.close();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
// 刷新图表信息
private void flushInfo() {
// 清空图表历史信息
while (this.tableModel.getRowCount() > 0) {
this.tableModel.removeRow(this.tableModel.getRowCount() - 1);
}
// 暂时存储单条信息
List<String> list = new LinkedList<String>();
// 将strList信息显示到表格中
// strList = new LinkedList<LinkedList<String>>();
if (strList != null) {
for (int i = 0; i < strList.size(); i++) {
list = strList.get(i);
this.tableModel.addRow(new Object[] { list.get(0), list.get(1), list.get(2) });
}
}
}
// “获取信息”方法
private void getinfo(String start, String end, NoPortWindow noPortWindow) {
List<String> ipList = new LinkedList<String>();
strList.add(infoList);
// 刷新加载显示到右侧图表中
flushInfo();
}
}
(2)
package com;
import java.awt.Toolkit;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class PublicWindowSet {
//窗口大小
public static void windowAttribute(JFrame jfr, int wide, int high, String title) {
windowIsCenter(wide, high, jfr);
jfr.setTitle(title);
jfr.setSize(wide, high);
jfr.setVisible(true);
jfr.setResizable(false);
}
//中心布局
public static void windowIsCenter(int windowWide, int windowHigh, JFrame frame) {
int screenWide = Toolkit.getDefaultToolkit().getScreenSize().width;
int screenHigh = Toolkit.getDefaultToolkit().getScreenSize().height;
int x = screenWide / 2 - windowWide / 2;
int y = screenHigh / 2 - windowHigh / 2;
frame.setLocation(x, y);
}
//提示面板
public static void promptPopUp(String content, String title, JFrame jfr) {
JOptionPane.showMessageDialog(jfr.getContentPane(), content, title, JOptionPane.INFORMATION_MESSAGE);
}
}
(3)
package com;
public class Main {
public static void main(String[] args) {
new NoPortWindow();
}
}
运行 Main.java
你去研究一下JTable