现在已实现JTable右键弹出菜单,但是有个小问题,就是在选中一行后,现在将鼠标移动到现有行外,右键点击空白处,此时要所有的行处于未选中状态,因为我要通过这个设定右键菜单的某些MenuItem的Enable属性,不知道有没有办法,请高手指点!

解决方案 »

  1.   

    正在学习swing 
     关注 学习中... 
        LZ 努力 我一般出了问题都是自己乱弄乱试,呵呵,个人愚见
      

  2.   

    我在学习swt呵呵,都差不多,呵呵
      

  3.   

    鼠标放上时有个事件,鼠标离开时有个事件
    public interface MouseListener extends EventListener
       {
       public void mousePressed(MouseEvent e);
       public void mouseExited(MouseEvent e);
      }
      

  4.   


    package testGUI;import java.awt.BorderLayout;
    import java.awt.Component;
    import java.awt.Dimension;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;import javax.swing.JFrame;
    import javax.swing.JMenuItem;
    import javax.swing.JPanel;
    import javax.swing.JPopupMenu;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.table.DefaultTableColumnModel;
    import javax.swing.table.DefaultTableModel;
    import javax.swing.table.TableColumn;public class TestJFrame extends JFrame {
    private static final long serialVersionUID = 1715591430628522795L; DefaultTableModel tablemodel = null; DefaultTableColumnModel tablecolumnmodel = null; TableColumn[] tablecolumn = null; JTable table = null; public static void main(String[] args) {
    new TestJFrame(); } public TestJFrame() {
    init();
    } private void init() {
    this.getContentPane().setLayout(new BorderLayout());
    this.getContentPane().add(getCenterPanel(),BorderLayout.NORTH);
    this.getContentPane().add(getSouthPanel(),BorderLayout.CENTER);
    this.pack();
    this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    this.setVisible(true);
    } private JPanel getCenterPanel() {
    JPanel panel = new JPanel();
    table = new JTable(getTableModel(), getTableColumnModel());
    addRow();
    JScrollPane js = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
    JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
    js.getViewport().add(table);
    panel.add(js);
    return panel;
    } private JPanel getSouthPanel() {
    JPanel panel = new JPanel();
    panel.setPreferredSize(new Dimension(100,100));
    panel.addMouseListener(new MouseAdapter() {
    public void mousePressed(MouseEvent evt) {
    if (evt.getButton() == MouseEvent.BUTTON3) {
    table.clearSelection();
    showPopMenu(evt.getComponent(), evt.getX(), evt.getY());
    }
    } public void mouseReleased(MouseEvent e) {
    }
    });
    return panel;
    } protected void showPopMenu(Component _compent, int _x, int _y) {
    JPopupMenu popmenu_header = new JPopupMenu();
    JMenuItem item_column_modify = new JMenuItem("Test");
    popmenu_header.add(item_column_modify);
    popmenu_header.show(_compent, _x, _y);
    } private DefaultTableModel getTableModel() {
    if (tablemodel == null) {
    Object[] name = { "", "", "", "", "" };
    Object[][] data = new Object[0][5]; tablemodel = new DefaultTableModel(data, name) { private static final long serialVersionUID = 5702753926909285134L; public boolean isCellEditable(int row, int column) {
    return false;
    }
    };
    }
    return tablemodel;
    } private DefaultTableColumnModel getTableColumnModel() {
    if (tablecolumnmodel == null) {
    tablecolumnmodel = new DefaultTableColumnModel();
    for (int i = 0; i < 5; i++) {
    tablecolumnmodel.addColumn(getTableColumn()[i]);
    }
    }
    return tablecolumnmodel;
    } private TableColumn[] getTableColumn() {
    if (tablecolumn == null) {
    tablecolumn = new TableColumn[5];
    for (int i = 0; i < 5; i++) {
    tablecolumn[i] = new TableColumn(i);
    tablecolumn[i].setCellRenderer(null);
    }
    tablecolumn[0].setHeaderValue("aa");
    tablecolumn[1].setHeaderValue("bb");
    tablecolumn[2].setHeaderValue("cc");
    tablecolumn[3].setHeaderValue("dd");
    tablecolumn[4].setHeaderValue("ee");
    }
    return tablecolumn;
    } protected void addRow() {
    Object[] obj = new Object[5];
    obj[0] = "11";
    obj[1] = "22";
    obj[2] = "33";
    obj[3] = "44";
    obj[4] = "55";
    for (int i = 0; i < 3; i++) {
    getTableModel().addRow(obj);
    }
    }
    }