只有用鼠标监听,JTable提供的监听器都是基于它的数据模型的.

解决方案 »

  1.   


    import javax.swing.*;
    import java.awt.*;
    import com.borland.jbcl.layout.*;
    import javax.swing.border.*;
    import java.awt.event.*;
    import java.text.*;
    import javax.swing.event.*;
    import javax.swing.table.*;
    import java.util.Vector;public class MyTable extends JFrame {
      private JPanel jPanel1 = new JPanel();
      private JPanel jPanel2 = new JPanel();
      private BorderLayout borderLayout1 = new BorderLayout();
      private JButton cancelButton = new JButton();
      private JButton okButton = new JButton();
      JPanel jPanel3 = new JPanel();
      Border border2;
      JScrollPane jScrollPane1 = new JScrollPane();
      BorderLayout borderLayout2 = new BorderLayout();
      JTable table = new JTable();
      Border border3;
      Border border4;
      JTextField textField=new JTextField();
      public MyTable(Frame frame,String title,boolean model) {
    //    super(frame,title,model);
        try {
          jbInit();
          pack();
          init();
    //      this.setLocationRelativeTo(frame);
        }
        catch(Exception e) {
          e.printStackTrace();
        }
      }
      private void jbInit() throws Exception {    java.awt.datatransfer.StringSelection ss=new java.awt.datatransfer.StringSelection("你的字符串");
        java.awt.datatransfer.Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
        clipboard.setContents(ss,ss);    border2 = BorderFactory.createEmptyBorder(10,10,5,10);
        border3 = BorderFactory.createEmptyBorder(10,10,5,10);
        border4 = BorderFactory.createEmptyBorder(0,0,5,0);
        jPanel1.setBorder(border3);
        jPanel1.setLayout(borderLayout1);
        jPanel2.setBorder(BorderFactory.createEtchedBorder());
        cancelButton.setText("关闭");
        cancelButton.addActionListener(new java.awt.event.ActionListener() {
          public void actionPerformed(ActionEvent e) {
            cancelButton_actionPerformed(e);
          }
        });
        okButton.setText("确定");
        okButton.addActionListener(new java.awt.event.ActionListener() {
          public void actionPerformed(ActionEvent e) {
            okButton_actionPerformed(e);
          }
        });
        jPanel3.setLayout(borderLayout2);
        jPanel3.setBorder(border4);
        jScrollPane1.setPreferredSize(new Dimension(454, 200));
        table.addInputMethodListener(new java.awt.event.InputMethodListener() {
          public void inputMethodTextChanged(InputMethodEvent e) {
            table_inputMethodTextChanged(e);
          }
          public void caretPositionChanged(InputMethodEvent e) {
            System.out.println("to that");
          }
        });
        table.addMouseListener(new java.awt.event.MouseAdapter() {
          public void mouseClicked(MouseEvent e) {
            table_mouseClicked(e);
          }
        });
        table.addFocusListener(new java.awt.event.FocusAdapter() {
          public void focusGained(FocusEvent e) {
            table_focusGained(e);
          }
        });
        this.getContentPane().add(jPanel1,  BorderLayout.CENTER);
        jPanel1.add(jPanel2,  BorderLayout.SOUTH);
        jPanel2.add(okButton, null);
        jPanel2.add(cancelButton, null);
        jPanel1.add(jPanel3, BorderLayout.CENTER);
        jPanel3.add(jScrollPane1,  BorderLayout.CENTER);
        jScrollPane1.getViewport().add(table, null);
      }
      public void init(){
        javax.swing.table.DefaultTableModel tableModel=new BaseTableModel(makeColumns(),makeDatas());
        table.setModel(tableModel);
        MyTableRenderer render=new MyTableRenderer(5,5);
    //    table.setDefaultRenderer(Integer.class,render);
           table.setDefaultRenderer(String.class,render);
      }
      public Vector makeColumns(){
        Vector column=new Vector();
        column.add("aaa");
        column.add("bbb");
        column.add("ccc");
        column.add("ddd");
        column.add("eee");
        return column;
      }
      public Vector makeDatas(){    Vector data=new Vector();
        for (int i = 0; i < 5; i++) {      Vector row=new Vector();
          row.addElement(new String("1"));
          row.addElement(new String("1"));
          row.addElement(new String("1"));
          row.addElement(new String("1"));
         row.addElement(new String("1"));
          data.add(row);
        }
        return data;
      }  public  static void main(String []arg){
        try {
          UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        }
        catch(Exception e) {
          e.printStackTrace();
        }
        MyTable mtf= new MyTable(null,"",false);    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        Dimension frameSize = mtf.getSize();
        if (frameSize.height > screenSize.height) {
          frameSize.height = screenSize.height;
        }
        if (frameSize.width > screenSize.width) {
          frameSize.width = screenSize.width;
        }
        mtf.setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2);    mtf.setVisible(true);
        mtf.setTitle("第二行和第四列可修改") ;    mtf.show();
        mtf.pack();
      }  void cancelButton_actionPerformed(ActionEvent e){
        System.exit(0);
      }  void okButton_actionPerformed(ActionEvent e) {  }
      void table_inputMethodTextChanged(InputMethodEvent e) {
      }
      protected void processWindowEvent(WindowEvent e) {
       if (e.getID() == WindowEvent.WINDOW_CLOSING)  cancelButton_actionPerformed(null);
       else super.processWindowEvent(e);
      }  void table_mouseClicked(MouseEvent e) {
    if(e.getClickCount()==1) System.out.println("to that");
      }  void table_focusGained(FocusEvent e) {
    System.out.println("focusGained");
      }  void table_ancestorAdded(AncestorEvent e) {
    System.out.println("ancestor");
      }
    }class BaseTableModel extends DefaultTableModel implements TableModelListener{
      public BaseTableModel() {
        super();
      }
      public BaseTableModel(Vector columnNames, Vector data){
        super(data, columnNames);
      }  public void tableChanged(TableModelEvent e) {    fireTableChanged(e);  }  public boolean isCellEditable(int row,int column){
        if(column==3||row==1) return true;
        return false;
      }
    }
     class MyTableRenderer extends JLabel implements TableCellRenderer{
        public MyTableRenderer(int rowCount,int colCount){
          super();
          this.setOpaque(true);
        }
        public Component getTableCellRendererComponent(
            JTable table,Object value,boolean isSelected,
            boolean hasFocus,int row,int col){
          this.setText(value.toString());
          setFont(new Font("SansSerif",0,12));
          setHorizontalAlignment(SwingConstants.CENTER);
          if(isSelected){
            super.setBackground(table.getSelectionBackground());
            this.setForeground(Color.red);
          }else{
            this.setBackground(Color.orange);
            this.setForeground(Color.red);
          }
          if (hasFocus) {
            setBorder( new LineBorder(new Color(0,200,0),1) );
          }else{
            setBorder(new EmptyBorder(1, 1, 1, 1));
          }
          if(table.getModel().isCellEditable(row,col)){
            this.setBackground(Color.white);
            this.setForeground(Color.black);
          }
          return this;
        }
      }