0

以下は私のセルレンダラーとエディターです。

package org.lims.register.gui;

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

import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JTextField;


public class EmpNamePanel extends JPanel {  

    private static final long serialVersionUID = 934032676749762710L;

    private JTextField empNameTF;
    private JButton browseB;

    public EmpNamePanel(){
        super(null);
        empNameTF=new JTextField();
        empNameTF.setEditable(false);
        empNameTF.setBounds(0, 0, 150, 30);
        add(empNameTF);
        browseB=new JButton("Browse");
        browseB.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent event){
                empNameTF.setText("Murali");
            }
        });
        browseB.setBounds(150,0, 100, 30);
        add(browseB);
    }


    /**
     * @return the empNameTF
     */
    public JTextField getEmpNameTF() {
        return empNameTF;
    }

    /**
     * @return the browseB
     */
    public JButton getBrowseB() {
        return browseB;
    }
}

package org.lims.register.gui.model;

import java.awt.Component;

import javax.swing.JTable;
import javax.swing.table.TableCellRenderer;

import org.lims.register.gui.EmpNamePanel;


public class EmpNamePanelRenderer extends EmpNamePanel implements TableCellRenderer{

    private static final long serialVersionUID = 5637984468556275113L;

    /* (non-Javadoc)
     * @see javax.swing.table.TableCellRenderer#getTableCellRendererComponent(javax.swing.JTable, java.lang.Object, boolean, boolean, int, int)
     */
    @Override
    public Component getTableCellRendererComponent(JTable table, Object value,
            boolean isSelected, boolean hasFocus, int row, int column) {
        if (isSelected) {
            setForeground(table.getSelectionForeground());
            super.setBackground(table.getSelectionBackground());
        } else {
            setForeground(table.getForeground());
            setBackground(table.getBackground());
        }
        System.out.println("value ;"+value);
        getEmpNameTF().setText((String)value);
        return this;
    }
}

package org.lims.register.gui.model;

import java.awt.Component;

import javax.swing.AbstractCellEditor;
import javax.swing.JTable;
import javax.swing.table.TableCellEditor;

import org.lims.register.gui.EmpNamePanel;

public class EmpNamePanelEditor extends AbstractCellEditor implements TableCellEditor{

    private static final long serialVersionUID = -5575645761840609401L;
    private EmpNamePanel enp;

    /* (non-Javadoc)
     * @see javax.swing.CellEditor#getCellEditorValue()
     */
    @Override
    public Object getCellEditorValue() {
        String value=enp.getEmpNameTF().getText();
        return value;
    }

    /* (non-Javadoc)
     * @see javax.swing.table.TableCellEditor#getTableCellEditorComponent(javax.swing.JTable, java.lang.Object, boolean, int, int)
     */
    @Override
    public Component getTableCellEditorComponent(JTable table, Object value,
            boolean isSelected, int row, int column) {
        enp=new EmpNamePanel();
        return enp;
    }
}

このレンダラーとエディターを使用しています。すべてが正常に機能しています。参照ボタンをクリックすると、テキストがテキストフィールドに表示され、テーブルの他の列にフォーカスすると、テキストはtextFieldに正しく表示されますが、この列から離れてテキストフィールドに戻ると、テキストが表示されます。が消え、テキストフィールドが空白になります。私の期待は、参照ボタンをクリックしてテキストを変更するまで、同じテキストが表示されるはずです。

4

1 に答える 1

0

actionListenersまたはeventListenersはありません。focusGainedとFocusLostのときに必要です。Javaドキュメントを使用し、適切なリスナーを追加して実装します

于 2012-06-22T09:02:10.820 に答える