高分:如何把数组传递到新打开的窗口(不是对话框)

sailland 2012-07-07 03:01:05

我从表格里得到当前行的所有列值,请问现在如何将他传递到新打开的JFRAME里

 

int colummCount = table.getModel().getColumnCount();// 列数
objs=new Object[colummCount];
for (int i = 0; i < colummCount; i++)
objs[i]=table.getModel().getValueAt(table.getSelectedRow(), i);



新的窗口是inpt();

new inpt().setVisible(true);

...全文
103 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
MiceRice 2012-07-07
  • 打赏
  • 举报
回复
给你个简单例子参考下吧,是之前找了个东西改的。

关于单元格自动求和的部分代码可以无视掉。

主要看:
JButton btnNewFrame = new JButton("Popup new JFrame");
之后的相关内容。


import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.JToolTip;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;

/**
* 主窗口
*/
public class TestJTable extends JFrame {

private JTable table = new JTable(20, 6) {
// 自定义ToolTips
public JToolTip createToolTip() {
JToolTip tip = super.createToolTip();
tip.setLayout(new BorderLayout());
tip.add(new JButton("Hello"), BorderLayout.NORTH);
tip.add(new JButton("Hello"), BorderLayout.SOUTH);
tip.setPreferredSize(new Dimension(300, 200));
return tip;
}
};

public TestJTable() {
this.setSize(800, 600);

// 预置ToolTip
table.setToolTipText("");

// 借助事件监听,实现单元格自动计算 6=4+5
table.getModel().addTableModelListener(new TableModelListener() {
public void tableChanged(TableModelEvent e) {
int col = e.getColumn();
int row = e.getFirstRow();
if (col == 3 || col == 4) { // 因为列数从0开始算,所以要减一
double v4 = 0;
try {
v4 = Double.valueOf(String.valueOf(table.getValueAt(row, 3)));
} catch (NumberFormatException ex) {
}
double v5 = 0;
try {
v5 = Double.valueOf(String.valueOf(table.getValueAt(row, 4)));
} catch (NumberFormatException ex) {
}
table.setValueAt(v4 + v5, row, 5);
}
}
});
this.add(table, BorderLayout.CENTER);

// 弹出新窗口,显示所选中行的数据
JButton btnNewFrame = new JButton("Popup new JFrame");
btnNewFrame.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// 先获得所选中行的数据
Object[] data = getSelectedRowData();
// 构造弹出窗口,并将数据传递进去
PopupFrame frm = new PopupFrame(data);
// 显示该窗口
frm.setVisible(true);
}
});
this.add(btnNewFrame, BorderLayout.SOUTH);
}

public Object[] getSelectedRowData() {
int colummCount = table.getModel().getColumnCount();// 列数
Object[] objs = new Object[colummCount];
for (int i = 0; i < colummCount; i++) {
objs[i] = table.getModel().getValueAt(table.getSelectedRow(), i);
}
return objs;
}

public static void main(String[] args) {
TestJTable wnd = new TestJTable();
wnd.setDefaultCloseOperation(EXIT_ON_CLOSE);
wnd.setVisible(true);
}

}

/**
* 弹出窗口
*/
class PopupFrame extends JFrame {
public PopupFrame(Object[] data) {
this.setSize(400, 300);
this.setLayout(new FlowLayout());
// 借助JLabel,循环把数据都显示出来
for (int i = 0; i < data.length; i++) {
JLabel lbl = new JLabel(String.valueOf(data[i]));
this.add(lbl);
}
}

}
MiceRice 2012-07-07
  • 打赏
  • 举报
回复
你这个只是将table中所选中的行数据弄出来了,并没有看到传递给JFrame的代码啊?
brightyq 2012-07-07
  • 打赏
  • 举报
回复
最好把你的代码都粘出来,给这一小段代码,没法弄。
sailland 2012-07-07
  • 打赏
  • 举报
回复
有代码吗?或者给个例子
   public Object[] getobjs()
{
int colummCount = table.getModel().getColumnCount();// 列数

objs=new Object[colummCount];
for (int i = 0; i < colummCount; i++)
objs[i]=table.getModel().getValueAt(table.getSelectedRow(), i);
return objs;
}

我写了这个,不过不能用的
宏Lee 2012-07-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

要么就重载构造函数,参数就是你的数据数组;或者直接提供个set方法,把数据设置进去呗。
[/Quote]
++
MiceRice 2012-07-07
  • 打赏
  • 举报
回复
要么就重载构造函数,参数就是你的数据数组;或者直接提供个set方法,把数据设置进去呗。

62,614

社区成员

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

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