Windows XP, JDK6_025, working with Substance, Metal, Windows, Nimbus
Edit1
on enter Key or Mouse pressed is fired isEnabled
Edit2
added MenuKeyListener,
NOTICE !!!!!
don't use MenuKeyListener for catching another KeyEvents as tab (Space) and enter are, otherwise generating sometimes spurious results, such as Unknown keyCode: 0x0 on ….
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.MenuKeyEvent;
import javax.swing.event.MenuKeyListener;
import javax.swing.event.PopupMenuEvent;
import javax.swing.event.PopupMenuListener;
import javax.swing.table.*;
import org.pushingpixels.substance.api.SubstanceLookAndFeel;
import org.pushingpixels.substance.api.skin.BusinessBlueSteelSkin;
public class TableCheckBox extends JFrame {
private static final long serialVersionUID = 1L;
private JTable table;
public TableCheckBox() {
Object[] columnNames = {"Type", "Company", "Shares", "Price", "Boolean"};
Object[][] data = {
{"Buy", "IBM", new Integer(1000), new Double(80.50), false},
{"Sell", "MicroSoft", new Integer(2000), new Double(6.25), true},
{"Sell", "Apple", new Integer(3000), new Double(7.35), true},
{"Buy", "Nortel", new Integer(4000), new Double(20.00), false}
};
DefaultTableModel model = new DefaultTableModel(data, columnNames);
table = new JTable(model) {
private static final long serialVersionUID = 1L;
@Override
public Class getColumnClass(int column) {
return getValueAt(0, column).getClass();
}
};
table.setPreferredScrollableViewportSize(table.getPreferredSize());
JScrollPane scrollPane = new JScrollPane(table);
add(scrollPane);
createPopupMenu();
}
private void createPopupMenu() {
MyMenuKeyListener myMenuKeyListener = new MyMenuKeyListener();
JPopupMenu popup = new JPopupMenu();
JMenuItem myMenuItem1 = new JMenuItem("cccccccccccccccccccccc");
myMenuItem1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//System.out.println("Done myMenuItem1");
}
});
myMenuItem1.getModel().addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
ButtonModel model = (ButtonModel) e.getSource();
if (model.isArmed()) {
//System.out.println("isArmed");
} else if (model.isEnabled()) {
//System.out.println("isEnabled");
} else if (model.isPressed()) {
//System.out.println("isPressed");
} else if (model.isRollover()) {
//System.out.println("isRollover");
} else if (model.isSelected()) {
//System.out.println("isSelected");
}
}
});
myMenuItem1.addMenuKeyListener(myMenuKeyListener);
JMenuItem myMenuItem2 = new JMenuItem("bbbbbbbbbbbbbbbbbbbbbb");
myMenuItem2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//System.out.println("Done myMenuItem2");
}
});
myMenuItem2.getModel().addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
ButtonModel model = (ButtonModel) e.getSource();
if (model.isArmed()) {
//System.out.println("isArmed");
} else if (model.isEnabled()) {
//System.out.println("isEnabled");
} else if (model.isPressed()) {
//System.out.println("isPressed");
} else if (model.isRollover()) {
//System.out.println("isRollover");
} else if (model.isSelected()) {
//System.out.println("isSelected");
}
}
});
myMenuItem2.addMenuKeyListener(myMenuKeyListener);
popup.add(myMenuItem1);
popup.add(myMenuItem2);
MouseListener popupListener = new PopupListener(popup);
table.addMouseListener(popupListener);
popup.setLightWeightPopupEnabled(false);
PopupMenuListener popupMenuListener = new MyPopupMenuListener();
popup.addPopupMenuListener(popupMenuListener);
}
private class PopupListener extends MouseAdapter {
private JPopupMenu popup;
PopupListener(JPopupMenu popupMenu) {
popup = popupMenu;
}
@Override
public void mousePressed(MouseEvent e) {
maybeShowPopup(e);
}
@Override
public void mouseReleased(MouseEvent e) {
if (table.getSelectedRow() != -1) {
maybeShowPopup(e);
}
}
private void maybeShowPopup(MouseEvent e) {
if (e.isPopupTrigger()) {
popup.show(e.getComponent(), e.getX(), e.getY());
}
}
}
private class MyMenuKeyListener implements MenuKeyListener {
public void menuKeyTyped(MenuKeyEvent e) {
MenuElement[] path = e.getPath();
JMenuItem item = (JMenuItem) path[path.length - 1];
System.out.println("Key typed: " + e.getKeyChar()
+ ", " + MenuKeyEvent.getKeyText(e.getKeyCode())
+ " on " + item.getText());
}
public void menuKeyPressed(MenuKeyEvent e) {
MenuElement[] path = e.getPath();
JMenuItem item = (JMenuItem) path[path.length - 1];
System.out.println("Key typed: " + e.getKeyChar()
+ ", " + MenuKeyEvent.getKeyText(e.getKeyCode())
+ " on " + item.getText());
}
public void menuKeyReleased(MenuKeyEvent e) {
MenuElement[] path = e.getPath();
JMenuItem item = (JMenuItem) path[path.length - 1];
System.out.println("Key typed: " + e.getKeyChar()
+ ", " + MenuKeyEvent.getKeyText(e.getKeyCode())
+ " on " + item.getText());
}
}
private class MyPopupMenuListener implements PopupMenuListener {
public void popupMenuCanceled(PopupMenuEvent popupMenuEvent) {
//System.out.println("Canceled");
}
public void popupMenuWillBecomeInvisible(PopupMenuEvent popupMenuEvent) {
//System.out.println("Becoming Invisible");
}
public void popupMenuWillBecomeVisible(PopupMenuEvent popupMenuEvent) {
//System.out.println("Becoming Visible");
}
}
public static void main(String[] args) {
/*SwingUtilities.invokeLater(new Runnable() {
public void run() {
SubstanceLookAndFeel.setSkin(new BusinessBlueSteelSkin());
}
});*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
/*UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());*/
} catch (ClassNotFoundException ex) {
} catch (InstantiationException ex) {
} catch (IllegalAccessException ex) {
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
}
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
TableCheckBox frame = new TableCheckBox();
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.pack();
frame.setLocation(150, 150);
frame.setVisible(true);
}
});
}
}