小弟我写了一个程序。界面上:一个JTable(2行2列),第2列可以编辑。2个JButton。作用为:点击某个按钮添加某个特定的符号(+ ,-)。
要实现的功能是:当JTable的某行第2列处于编辑状态时。点击某个按钮。可以追加某个符号在当前列里面。
比如说:JTable的第一行第二列目当前处于可以编辑状态。我在里面输入“1”,然后我想要点击第一个按钮追加一个“+”在1后面。就是实现这个功能。
其实功能小弟我是实现了。但是效果不尽人意。比如说:我先输入“1”,然后我点击按钮。但是符号加不进去。如果想要加进去。就必须在输入单元格内容完毕后,敲击回车键(敲击后。单元格不处于编辑状态)。然后再点击按钮。符号就加进去了。
请高手帮忙。如果需要代码,我会贴出来。

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【lirenhong0108】截止到2008-07-18 17:12:54的历史汇总数据(不包括此帖):
    发帖的总数量:10                       发帖的总分数:120                      每贴平均分数:12                       
    回帖的总数量:9                        得分贴总数量:1                        回帖的得分率:11%                      
    结贴的总数量:9                        结贴的总分数:100                      
    无满意结贴数:3                        无满意结贴分:70                       
    未结的帖子数:1                        未结的总分数:20                       
    结贴的百分比:90.00 %               结分的百分比:83.33 %                  
    无满意结贴率:33.33 %               无满意结分率:70.00 %                  
    值得尊敬
      

  2.   

    差不多是这样子吧import java.awt.BorderLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.JTextField;public class AddValueTableTest extends JFrame {    private JTable table = new JTable();    private JButton button = new JButton();    public AddValueTableTest() {
            table = new JTable(2, 2) {
                @Override
                public boolean isCellEditable(int row, int column) {
                    if (column == 1) {
                        return true;
                    }
                    return super.isCellEditable(row, column);
                }
            };
            this.getContentPane().setLayout(new BorderLayout());
            this.getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);
            this.getContentPane().add(new JScrollPane(button), BorderLayout.SOUTH);
            button.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    JTextField textField = ((JTextField) table.getEditorComponent());
                    textField.setText(textField.getText() + "+");
                }
            });
        }    /**
         * @param args
         */
        public static void main(String[] args) {
            AddValueTableTest frame = new AddValueTableTest();
            frame.setVisible(true);
            frame.setSize(300, 300);
            frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
        }}
      

  3.   

    这个问题的关键是编辑状态下的内容还没有进入table model里面去。所以你去编辑table model里的内容并不能在界面上反应出来。正确的方法是直接编辑editor compoent里的内容。import java.awt.Component;
    import java.awt.GridBagConstraints;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JTable;
    import javax.swing.JTextField;
    import javax.swing.table.AbstractTableModel;
    public class TestFrame extends JFrame { private JTable table1 = new JTable();
    private JButton button1 = new JButton("append");
    /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    TestFrame tf = new TestFrame();
    tf.setVisible(true);
    }

    public TestFrame(){
    setSize(400, 300);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    getContentPane().setLayout(new java.awt.GridBagLayout());
    init();
    }

    public void init(){
    table1.setModel(new MyTableModel());
    GridBagConstraints gridBagConstraints = new GridBagConstraints();
    gridBagConstraints.gridx = 0;
    gridBagConstraints.gridy = 0;
    gridBagConstraints.gridwidth = 1;
    gridBagConstraints.gridheight = 1;
    gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; 
    gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
    gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 
    getContentPane().add(table1, gridBagConstraints);

    button1.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) {
    int selectedCol = table1.getSelectedColumn();
    int selectedRow = table1.getSelectedRow();
    Component editor = table1.getEditorComponent();
    if(editor != null){
    JTextField editorTextField = (JTextField)editor;
    editorTextField.setText(editorTextField.getText()+"+");
    }else{
    table1.getModel().setValueAt(table1.getModel().getValueAt(selectedRow, selectedCol)+"+", selectedRow, selectedCol);
    }
    table1.updateUI();
    }

    });
    gridBagConstraints = new GridBagConstraints();
    gridBagConstraints.gridx = 0;
    gridBagConstraints.gridy = 1;
    gridBagConstraints.gridwidth = 1;
    gridBagConstraints.gridheight = 1;
    gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; 
    gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
    gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 
    getContentPane().add(button1, gridBagConstraints);
    }

    public static class MyTableModel extends AbstractTableModel{
    public static final int ROW_COUNT = 2;
    public static final int COL_COUNT = 2;
    private String[][] values = new String[ROW_COUNT][COL_COUNT];

    public int getColumnCount() {
    // TODO Auto-generated method stub
    return COL_COUNT;
    } public int getRowCount() {
    // TODO Auto-generated method stub
    return ROW_COUNT;
    } public Object getValueAt(int rowIndex, int columnIndex) {
    return values[rowIndex][columnIndex];
    }


    public void setValueAt(Object value, int rowIndex, int columnIndex) {
    values[rowIndex][columnIndex] = value.toString();
    } public boolean isCellEditable(int rowIndex, int columnIndex){
    return true;
    }

    }}