帮小妹看看这个是什么问题?或你有更好方法解决(谁的方法最好,我会把100分直接送你))

xierong2011 2011-10-27 11:34:05

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.DefaultCellEditor;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumnModel;

public class Test extends JFrame {


private JTable table;
private DefaultTableModel cardModel;
/**
* Launch the application
* @param args
*/
public static void main(String args[]) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Test frame = new Test();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}

/**
* Create the frame
*/
public Test() {
super();
setBounds(100, 100, 500, 375);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

final JScrollPane scrollPane = new JScrollPane();
getContentPane().add(scrollPane, BorderLayout.CENTER);

table = new JTable();
scrollPane.setViewportView(table);
//
initTable();
tableVal();
table.addMouseListener(new MouseSelect());
}
private void initTable(){
cardModel = new DefaultTableModel(6,3);
table.setModel(cardModel);
table.getColumnModel().getColumn(0).setHeaderValue("1");
table.getColumnModel().getColumn(1).setHeaderValue("2");
table.getColumnModel().getColumn(2).setHeaderValue("3");
table.setRowHeight(25);
}
public void tableVal() {
String[] content={"性别","星期"};
JComboBox contentType = new JComboBox();
for(int i=0;i<content.length;i++){
contentType.addItem(content[i]);
}
DefaultCellEditor contentcell = new DefaultCellEditor(contentType);
TableColumnModel tcm = table.getColumnModel();
tcm.getColumn(0).setCellEditor(contentcell);

}
private class MouseSelect implements MouseListener {

@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
Object target = e.getSource();
if (target instanceof JTable) {
int row=table.getSelectedRow();
int col=table.getSelectedColumn();
String name=table.getValueAt(row, col).toString();
if(col==0){
if(name.equals("性别")){
String[] data={"男","女"};
JComboBox dataBox = new JComboBox();
for(int i=0;i<data.length;i++){
dataBox.addItem(data[i]);
}
DefaultCellEditor dataCell = new DefaultCellEditor(dataBox);
TableColumnModel dataTcm = table.getColumnModel();
dataTcm.getColumn(1).setCellEditor(dataCell);
}
if(name.equals("星期")){
String[] date={"星期1","星期2","星期3","星期4"};
JComboBox dateBox = new JComboBox();
for(int i=0;i<date.length;i++){
dateBox.addItem(date[i]);
}
DefaultCellEditor dateCell = new DefaultCellEditor(dateBox);
TableColumnModel dateTcm = table.getColumnModel();
dateTcm.getColumn(1).setCellEditor(dateCell);
}
}
}


}

@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub

}

@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub

}

@Override
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub

}

@Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub

}

}

}

想实现的功能是: 点击JTable的任意行第一列“性别”时 第二列的该行显示“男”“女”
点击“星期”时,显示"星期1","星期2","星期3","星期4"
不要拘泥上面的例子,寻找好的方法 代码最好稳定 高效 简洁 ...
...全文
480 43 打赏 收藏 转发到动态 举报
写回复
用AI写文章
43 条回复
切换为时间正序
请发表友善的回复…
发表回复
xierong2011 2011-10-31
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 lilianplayer_163 的回复:]

分享下解决办法呀。。。。
[/Quote]
29楼正解
xierong2011 2011-10-31
  • 打赏
  • 举报
回复
[Quote=引用 29 楼 sasuke38 的回复:]

Java code

package ui;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.DefaultCellEditor;
import javax.swing.DefaultComboBoxModel;
import javax.swing.Gr……
[/Quote]
超额完成 呵呵 我做的 和你的基本一样 我原先继承DefaultTable 最后改成AbstractTable 谢谢你啦 给你70分吧 其他人也分一杯羹吧 嘿嘿..
xierong2011 2011-10-31
  • 打赏
  • 举报
回复
[Quote=引用 36 楼 devil26 的回复:]

Java code
package com.esen.chenf.test;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.DefaultCe……
[/Quote]
我试了 你这个有点问题 但是反正还是要谢谢你啦 呵呵
Devil26 2011-10-31
  • 打赏
  • 举报
回复
package com.esen.chenf.test;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.DefaultCellEditor;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.event.CellEditorListener;
import javax.swing.event.ChangeEvent;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumnModel;

public class Test23 extends JFrame {

private JTable table;

private DefaultTableModel cardModel;

/**
* Launch the application
* @param args
*/
public static void main(String args[]) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Test23 frame = new Test23();
frame.setVisible(true);
}
catch (Exception e) {
e.printStackTrace();
}
}
});
}

/**
* Create the frame
*/
public Test23() {
super();
setBounds(100, 100, 500, 375);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

final JScrollPane scrollPane = new JScrollPane();
getContentPane().add(scrollPane, BorderLayout.CENTER);

table = new JTable();
scrollPane.setViewportView(table);
//
initTable();
tableVal();
// table.addMouseListener(new MouseSelect());
}

private void initTable() {
cardModel = new DefaultTableModel(6, 3);
table.setModel(cardModel);
table.getColumnModel().getColumn(0).setHeaderValue("1");
table.getColumnModel().getColumn(1).setHeaderValue("2");
table.getColumnModel().getColumn(2).setHeaderValue("3");
table.setRowHeight(25);
}

public void tableVal() {
String[] content = { "性别", "星期" };
JComboBox contentType = new JComboBox();
for (int i = 0; i < content.length; i++) {
contentType.addItem(content[i]);
}
DefaultCellEditor contentcell = new DefaultCellEditor(contentType);
contentcell.addCellEditorListener(new MouseSelect());
TableColumnModel tcm = table.getColumnModel();
tcm.getColumn(0).setCellEditor(contentcell);

}

private class MouseSelect implements CellEditorListener {

public void editingCanceled(ChangeEvent e) {

}

public void editingStopped(ChangeEvent e) {
Object target = e.getSource();
if (target instanceof DefaultCellEditor) {
int row = table.getSelectedRow();
int col = table.getSelectedColumn();
String name = "";
try {
name = table.getValueAt(row, col).toString();
}
catch (Exception e1) {

}
if (col == 0) {
if (name.equals("性别")) {
String[] data = { "男", "女" };
JComboBox dataBox = new JComboBox();
for (int i = 0; i < data.length; i++) {
dataBox.addItem(data[i]);
}
DefaultCellEditor dataCell = new DefaultCellEditor(dataBox);
TableColumnModel dataTcm = table.getColumnModel();
dataTcm.getColumn(1).setCellEditor(dataCell);
}
if (name.equals("星期")) {
String[] date = { "星期1", "星期2", "星期3", "星期4" };
JComboBox dateBox = new JComboBox();
for (int i = 0; i < date.length; i++) {
dateBox.addItem(date[i]);
}
DefaultCellEditor dateCell = new DefaultCellEditor(dateBox);
TableColumnModel dateTcm = table.getColumnModel();
dateTcm.getColumn(1).setCellEditor(dateCell);
}
}
}
}

}

public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub

}

public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub

}

public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub

}

public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
}
}

回复的有点晚啊,周五看了一下,没时间弄了,就拖到今天了。在你那个例子的基础上进行了修改,我当然看到你所说的“不要拘泥于例子”,但还是这样拘泥了……
xierong2011 2011-10-31
  • 打赏
  • 举报
回复
[Quote=引用 42 楼 devil26 的回复:]

引用 41 楼 xierong2011 的回复:

引用 40 楼 devil26 的回复:

引用 37 楼 xierong2011 的回复:

引用 36 楼 devil26 的回复:

Java code
package com.esen.chenf.test;

import java.awt.BorderLayout;
import java.awt.Event……
[/Quote]
嗯 你说出了 大家的心声 嘿嘿
Devil26 2011-10-31
  • 打赏
  • 举报
回复
[Quote=引用 41 楼 xierong2011 的回复:]

引用 40 楼 devil26 的回复:

引用 37 楼 xierong2011 的回复:

引用 36 楼 devil26 的回复:

Java code
package com.esen.chenf.test;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.even……
[/Quote]
哦,分数倒没什么,呵呵,发现问题共同进步才是关键,欢迎指教。
xierong2011 2011-10-31
  • 打赏
  • 举报
回复
[Quote=引用 40 楼 devil26 的回复:]

引用 37 楼 xierong2011 的回复:

引用 36 楼 devil26 的回复:

Java code
package com.esen.chenf.test;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.MouseEvent;
import ja……
[/Quote]
其实也第二次看的时候,也不算什么大问题 我开始看错了 呵呵 不好意思啊 才给你10分
Devil26 2011-10-31
  • 打赏
  • 举报
回复
[Quote=引用 37 楼 xierong2011 的回复:]

引用 36 楼 devil26 的回复:

Java code
package com.esen.chenf.test;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
……
[/Quote]想问问有什么问题?
tof21 2011-10-28
  • 打赏
  • 举报
回复
这个监听TableModel 然后控制一下编辑器就行啦
xierong2011 2011-10-28
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 kouyisc 的回复:]

能把代码看完的,已经很佩服了。。。。看到这堆swing的代码 头疼。。。。只能祝你好运了。。。。。。
[/Quote]
还是要谢谢你呀
zhu_9527 2011-10-28
  • 打赏
  • 举报
回复
学习了
kouyiSC 2011-10-28
  • 打赏
  • 举报
回复
能把代码看完的,已经很佩服了。。。。看到这堆swing的代码 头疼。。。。只能祝你好运了。。。。。。
scrack 2011-10-28
  • 打赏
  • 举报
回复
来看标题的 不知道楼主与头像是不是同一个人
nizhicheng 2011-10-28
  • 打赏
  • 举报
回复
小妹啊 绑定给分不~
xierong2011 2011-10-28
  • 打赏
  • 举报
回复
怎么没有人啊
wingson_shen 2011-10-28
  • 打赏
  • 举报
回复


SWING。我不会。。
xierong2011 2011-10-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 mscf 的回复:]

你的需求实现在这里,基本原模原样
http://www.java2s.com/CN/Code/Java/Swing-Components/EachRowwithdifferentEditorExample.htm
[/Quote]

和我要求的不一样呀
Brad_Lau 2011-10-28
  • 打赏
  • 举报
回复
混分吧。
Jobernowl 2011-10-28
  • 打赏
  • 举报
回复
[Quote=引用 31 楼 zhiyi321 的回复:]
一句小妹,都冲动了~~~~
[/Quote]

哥懂 你冲动了 因为你寂寞了
Java高知社区 2011-10-28
  • 打赏
  • 举报
回复
页面头疼,不过应该可以。
加载更多回复(21)

62,614

社区成员

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

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