帮小妹看看这个是什么问题?或你有更好方法解决(谁的方法最好,我会把100分直接送你))
- Java code
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"
不要拘泥上面的例子,寻找好的方法 代码最好稳定 高效 简洁 ...
[解决办法]
你的需求实现在这里,基本原模原样
http://www.java2s.com/CN/Code/Java/Swing-Components/EachRowwithdifferentEditorExample.htm
[解决办法]
标题太牛了..帮顶了
[解决办法]
能把代码看完的,已经很佩服了。。。。看到这堆swing的代码 头疼。。。。只能祝你好运了。。。。。。
[解决办法]
这个监听TableModel 然后控制一下编辑器就行啦
[解决办法]
看不懂你的需求
[解决办法]
你用2个隐藏的button,width,hight,borderWidth都为0. button_Click触发绑定数据,1个绑定“性别”,1个绑定“星期”.
[解决办法]
表格第二列设置下拉框编辑器
表格增加点击监听,当点击时候让第二列进入编辑
[解决办法]
初学者看代ing...
[解决办法]
分享下解决办法呀。。。。
[解决办法]
想随便选一项刷新一下,失败唉,功夫不行啊 哎~~
- Java code
dataBox.setSelectedItem(1);try { Thread.sleep(1000); table.repaint(); } catch (InterruptedException e1) { //e1.printStackTrace(); }
[解决办法]
接分的
[解决办法]
一般女生发的帖子回复率是最高的
[解决办法]
- 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.GroupLayout;import javax.swing.JButton;import javax.swing.JComboBox;import javax.swing.JFrame;import javax.swing.JScrollPane;import javax.swing.JTable;import javax.swing.WindowConstants;import javax.swing.table.TableColumnModel;public class Test extends JFrame implements ActionListener{ private static final long serialVersionUID = 1L; private JButton btnAdd; private JButton btnDel; private JScrollPane splT; private JTable tblMain; private JComboBox contentType; private JComboBox cboItem; private String[] content; private String[] sex; private String[] weekDay; private TableModel myModel; TableColumnModel tcm; public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new Test().setVisible(true); } }); } public Test() { initComponents(); } private void initComponents() { String[] headText={"Title","Item"}; myModel=new TableModel(headText); splT = new JScrollPane(); tblMain = new JTable(myModel); btnAdd = new JButton("Add"); btnDel=new JButton("Delete"); btnAdd.addActionListener(this); btnDel.addActionListener(this); setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); splT.setViewportView(tblMain); content=new String[]{"性别","星期"}; sex=new String[]{"女","男"}; weekDay=new String[]{"星期1","星期2","星期3","星期4","星期5","星期6","星期7"}; contentType = new JComboBox(content); cboItem=new JComboBox(); tcm = tblMain.getColumnModel(); tcm.getColumn(0).setCellEditor(new DefaultCellEditor(contentType)); tcm.getColumn(1).setCellEditor(new DefaultCellEditor(cboItem)); contentType.addActionListener(this); GroupLayout layout = new GroupLayout(getContentPane()); getContentPane().setLayout(layout); GroupLayout.SequentialGroup one=layout.createSequentialGroup(); one.addComponent(btnDel); one.addComponent(btnAdd); GroupLayout.SequentialGroup two=layout.createSequentialGroup(); two.addComponent(splT); GroupLayout.ParallelGroup ot=layout.createParallelGroup(); ot.addGroup(two); ot.addGroup(GroupLayout.Alignment.TRAILING, one); layout.setHorizontalGroup(ot); GroupLayout.ParallelGroup btnRow=layout.createParallelGroup(); btnRow.addComponent(btnDel); btnRow.addComponent(btnAdd); GroupLayout.SequentialGroup c1=layout.createSequentialGroup(); c1.addGroup(btnRow); c1.addComponent(splT,188, 188,Short.MAX_VALUE); GroupLayout.ParallelGroup c2=layout.createParallelGroup(); c2.addGroup(c1); layout.setVerticalGroup(c2); pack(); } @Override public void actionPerformed(ActionEvent e) { Object target=e.getSource(); String[] content={null,null}; if(target.equals(btnAdd)){ myModel.addRow(content); tblMain.updateUI(); } else if(target.equals(contentType)){ String type=(String) contentType.getSelectedItem(); if(null!=type){ if(type.equals("性别")){ cboItem.removeAllItems(); cboItem.setModel(new DefaultComboBoxModel(sex)); } else if(type.equals("星期")){ cboItem.removeAllItems(); cboItem.setModel(new DefaultComboBoxModel(weekDay)); } } } else if(target.equals(btnDel)){ myModel.removeRow(tblMain.getSelectedRow()); tblMain.updateUI(); } }}
[解决办法]
看上去我的布局有点麻烦 但是这种布局其实挺好的 因为那是自动化的 其次 虽然一点小功能就写个模板类有点小题大作 但是我相信 要用table的话 总有一天要这样做的 希望对妹子有点帮助
[解决办法]
一句小妹,都冲动了~~~~
[解决办法]
[解决办法]
混分吧。
[解决办法]
来看标题的 不知道楼主与头像是不是同一个人
[解决办法]
学习了
[解决办法]
- 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.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 }}