关于JTabbedPane相关的问题

CTea321 2008-11-11 02:28:59
我做的界面里,每操作一次会打开一个TabbedPane(选项卡)
选项卡中添加的组件是一个滚动条和一个表格
我想在选中某个选项卡时,就可以把选项卡表格中的数据保存在一个txt文件里
就像现在的浏览器那样,打开多个选项卡,可以保存选中的选项卡里的内容

现在问题就是1、怎么获得选项卡的标题并能显示在“保存对话框”中“文件名”文本框里
2、怎么得到选项卡中表格的数据

哪位达人做过这方面的例子或有这方面的例子,教一下我
...全文
105 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
oracle_lover 2008-11-11
  • 打赏
  • 举报
回复
/*
* 下面代码未经调试,可能存在一些错误,大体意思明白就行了
*/

import ; // 略

public class Jtest2 extends JFrame implements ActionListener {

private static final long serialVersionUID = -2517228676216833821L;

// 需要在主类各方法中都要调用的变量在此声明
private static final int MAXTAB = 10; // 可以允许的最大标签数
JTable[] tableArray = new JTable[MAXTAB]; // 表格数组
MyTableModel[] modelArray = new MyTableModel[MAXTAB]; // 表格模型数组
int tabCount = 0; // 已有的标签和表格计数
JFileChooser fileChooser;
JTabbedPane paneTab;

public Jtest2() { // 窗口的构造函数
super("Jtest2");
// 在此创建的 paneTab,fileChooser 其他方法均可调用,因为是在外面声明的
paneTab = new JTabbedPane();
fileChooser = new JFileChooser();
....
}

public addTabTable() { // 新建表格和标签
if ((tabCount + 1) >= MAXTAB) return; // tabCount可以允许 0~9
// 在此创建的 table, model 其他方法均可调用,因为是在外面声明的
modelArray[tabCount] = new MyTableModel();
tableArray[tabCount] = new JTable(modelArray[tabCount]);
...
// sp 的作用域为此方法内,下一次又指向新的 JScrollPane
// 别的方法均不需要操作 sp,因此在某个方法内声明
JScrollPane sp = new JScrollPane(tableArray[tabCount]);
paneTab.addTab("标签" + tabCount, sp);
tabCount++; // 计数器 + 1
}

public saveData() {
// 获取当前标签的序号,也是表格数组的序号
int index = paneTab.getSelectedIndex();
// 用 modelArray[index] 操作表格 tableArray[index] 进行数据的保存
....
// 根据当前标签设置文件名
String strFile = "c:\\" + paneTab.getTitleAt(paneTab.getSelectedIndex()) + ".txt";
File file = new File(strFile);
fileChooser.setSelectedFile(file);
int fresult = fileChooser.showSaveDialog(this);
if (fresult == JFileChooser.APPROVE_OPTION) {
// 自己的代码
}
}

public void actionPerformed(ActionEvent event) {
if (event.getActionCommand().equals("保存文件")) {
saveData();
// .....
}
}

// 关键类,继承自 AbstractTableModel
class MyTableModel extends AbstractTableModel {

....

}
CTea321 2008-11-11
  • 打赏
  • 举报
回复
table 都是由一个对象生成的,只是TableModel不一样
然后把table加在一个ScrollPane,再把ScrollPane加在Tab里。

我是真的不不知道怎么做下面的, oracle_lover 能不能具体说下呢
oracle_lover 2008-11-11
  • 打赏
  • 举报
回复
1. 通过 paneTab.getSelectedIndex() 就知道哪个选项卡被选中了
2. 你把 table 往 paneTab 里加的时候,就知道哪个 table 被加到哪个选项卡里了
3. 知道了哪个选项卡被选中了,不就知道该保存哪个 table 里的内容了吗
CTea321 2008-11-11
  • 打赏
  • 举报
回复
谢谢LS的朋友
两个问题不是分开的
比如三次操作在面板上加了三个选项卡:选项卡1,选项卡2,选项卡3。里面分别是不同的表格内容
如果选中的是选项卡1,则保存的时候就保存选项卡1中的内容;
如果选中的是选项卡2,则保存的时候就保存选项卡1中的内容;
如果选中的是选项卡3,则保存的时候就保存选项卡1中的内容
.......

需要选中哪个就保存哪个中的表格内容
达人帮帮我

oracle_lover 2008-11-11
  • 打赏
  • 举报
回复
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import java.awt.Dimension;
import java.awt.GridLayout;

public class TableDemo extends JPanel {
private boolean DEBUG = false; // 是否是调试,如果是则在控制台打印相关信息

public TableDemo() {
super(new GridLayout(1,0));

// 用 MyTableModel 创建表格,其定义在后面
JTable table = new JTable(new MyTableModel());
table.setPreferredScrollableViewportSize(new Dimension(500, 70));

// 创建滚动条,并将表格放在里面
JScrollPane scrollPane = new JScrollPane(table);

// 将滚动条(包含表格)加入主 Panel
add(scrollPane);
}

// 关键类,继承自 AbstractTableModel
class MyTableModel extends AbstractTableModel {
// 表格的标题
private String[] columnNames = {"First Name",
"Last Name",
"Sport",
"# of Years",
"Vegetarian"};
// 表格的内容
private Object[][] data = {
{"Mary", "Campione",
"Snowboarding", new Integer(5), new Boolean(false)},
{"Alison", "Huml",
"Rowing", new Integer(3), new Boolean(true)},
{"Kathy", "Walrath",
"Knitting", new Integer(2), new Boolean(false)},
{"Sharon", "Zakhour",
"Speed reading", new Integer(20), new Boolean(true)},
{"Philip", "Milne",
"Pool", new Integer(10), new Boolean(false)}
};

// 获取列数
public int getColumnCount() {
return columnNames.length;
}

// 获取内容长度
public int getRowCount() {
return data.length;
}

// 获取列名
public String getColumnName(int col) {
return columnNames[col];
}

// 获取单元格数据
public Object getValueAt(int row, int col) {
return data[row][col];
}

/*
* 获取列编辑器类名
*/
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}

/*
* 如果表格不可编辑,则不需要实现此方法
*/
public boolean isCellEditable(int row, int col) {
//Note that the data/cell address is constant,
//no matter where the cell appears onscreen.
if (col < 2) { //如果列数大于2,则不可编辑,可自由定义
return false;
} else {
return true;
}
}

/*
* 如果表格数据不能改变,则不需要实现此方法
*/
public void setValueAt(Object value, int row, int col) {
if (DEBUG) {
System.out.println("Setting value at " + row + "," + col
+ " to " + value
+ " (an instance of "
+ value.getClass() + ")");
}

data[row][col] = value;
fireTableCellUpdated(row, col);

if (DEBUG) {
System.out.println("New value of data:");
printDebugData();
}
}

// 打印所有数据
private void printDebugData() {
int numRows = getRowCount();
int numCols = getColumnCount();

for (int i=0; i < numRows; i++) {
System.out.print(" row " + i + ":");
for (int j=0; j < numCols; j++) {
System.out.print(" " + data[i][j]);
}
System.out.println();
}
System.out.println("--------------------------");
}
}

/**
* 创建GUI
*/
private static void createAndShowGUI() {

// 创建一个窗口
JFrame frame = new JFrame("TableDemo");
// 窗口关闭则程序退出
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

TableDemo newContentPane = new TableDemo();
newContentPane.setOpaque(true);
frame.setContentPane(newContentPane);

frame.pack();
frame.setVisible(true);
}

public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}
oracle_lover 2008-11-11
  • 打赏
  • 举报
回复
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;

import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;

public class Jtest2 extends JFrame implements ActionListener {

private static final long serialVersionUID = -2517228676216833821L;
JFileChooser fileChooser;
JTabbedPane paneTab;

public Jtest2() {
super("Jtest2");

this.setSize(640, 480); // 设置窗口大小
this.setLocationRelativeTo(null); // 窗口屏幕居中
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 窗口关闭,则程序退出
java.awt.Container container = this.getContentPane();

JButton button1 = new JButton("保存文件");
button1.setActionCommand("保存文件");
button1.addActionListener(this);
fileChooser = new JFileChooser();
paneTab = new JTabbedPane();
JPanel paneBlank = new JPanel();
paneTab.addTab("标题", paneBlank);

container.add(button1, BorderLayout.PAGE_START);
container.add(paneTab, BorderLayout.CENTER);
}
public void actionPerformed(ActionEvent event) {
if (event.getActionCommand().equals("保存文件")) {
// 下面的路径可以自由设置,不需要是 c:\
// 下面代码可以获取当前标签的标题,并显示在文件对话框上
String strFile = "c:\\" + paneTab.getTitleAt(paneTab.getSelectedIndex()) + ".txt";
File file = new File(strFile);
fileChooser.setSelectedFile(file);
int fresult = fileChooser.showSaveDialog(this);
if (fresult == JFileChooser.APPROVE_OPTION) {
// 自己的代码
}
}
}

// 创建GUI
private static void createAndShowGUI() {
Jtest2 xframe = new Jtest2();
xframe.setVisible(true);
}

public static void main(String[] args) {
// 为事件处理线程安排一个任务:创建并显示程序的GUI
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}

}
Java程序设计复习题 Java程序设计复习题全文共19页,当前为第1页。Java程序设计复习题全文共19页,当前为第1页。一、选择题: Java程序设计复习题全文共19页,当前为第1页。 Java程序设计复习题全文共19页,当前为第1页。 运行Java程序需要的工具软件所在的目录是 A 。 JDK的bin目录 B. JDK的demo目录 C. JDK的lib目录 D. JDK的jre目录 下列关于Java语言特点的叙述中,错误的是 A - Java是面向过程的编程语言 B. Java支持分布式计算 C. Java是跨平台的编程语言 D. Java支持多线程 Java的核心包中,提供编程应用的基本类的包是 。 java, lang B. java, util C. java, applet D. java, rmi 下列关于Java对import语句规定的叙述中,错误的是 C 。 在Java程序中import语句可以有多个 在Java程序中import语句可以没有 在Java程序中import语句必须有一个 在Java程序中import语句引入在所有类定义之前 在编译Java程序时,用于指定生成.class文件位置的选项是 B 。 -g B. -d C. -verbose D. -vonarn 下列关于构造方法的叙述中,错误的是 C 。 Java语言规定构造方法名与类名必须相同 Java语言规定构造方法没有返回值,但不用void声明 Java语言规定构造方法不可以重载 Java语言规定构造方法只能通过new自动调用 下列叙述中错误的是 D 。 Java Application与Applet所用编译命令相同 通常情况下,Java Application H能有一个main。方法 Java Applet必须有HTML文件才能运行 Java Applet程序的.class文件可用Java命令运行 处理对象传输的接口是 A 。 Serializable B. Cloneable C. ItenListener D. ActionListener 在读取二进制数据文件的记录时,为了提高效率常常使用的一种辅助类是 C 。 InputStream B. FilelnputStream C. BufferlnputStream D. BufferedReader 下列事件监听器中,无法对TextField对象进行事件监听和处理的是 D 。 ActionListener B. FocusListener C. MouseMotionListener D. ChangeListen Swing的选项面板是 A o JtabbedPane B. JLayeredPane C. JscrollPane D. JsplitPane 有一段java应用程序,它的主类名是Abe,那么保存它的源文件名可以是。 abc. java B. Abe. class C. Abe. java D.以上都可以 Java程序设计复习题全文共19页,当前为第2页。Java程序设计复习题全文共19页,当前为第2页。每个Java小应用程序必须定义为 A 。 Java程序设计复习题全文共19页,当前为第2页。 Java程序设计复习题全文共19页,当前为第2页。 Applet类或JApplet类的子类B. JFrame类的子类C. Frame的子类 D. Window的子类 在Applet的init()方法被调 后,接下来最先被调用的方法是 B 。 run() B. start () C. stopO D. destroy () 下列关于Applet的安全限制的叙述中,错误的是 C 。 通常情况下,禁止Applet读、写本地文件系统 通常情况下,禁止Applet向Applet源主机之外的任何主机建立网络连接 通常情况下,禁止Applet读取系统信息 通常情况下,禁止Applet加载本地库或方法 整型数据类型中,需要内存空间最少的是. A. short B. long C. int D. byte 下列标识符(名字)命名原则中,正确的是 D - A.类名的首字母小写B.变量和方法名的首字母大写C.接口名的首字母小写D.常量完全大写 提供showDocument ()方法,使Applet能够请求浏览器访问特定URL的类是 B 。 A. Applet B. AppletContext C. JApplet D. URL Java中定义常量的保留字是是 B - A. const B. final C. finally D. native 在调用方法时,若要使方法改变实参的值,可以。 A,用基本数据类型作为参数 B.用指针作为参数 C,用对象作为参数 D.以上都不可以 下列有关Java布尔

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧