TristateCheckBox(String text, Icon icon, TristateState initial, boolean original) { super(text, icon); //Set default single model setModel(new TristateButtonModel(initial, this, original)); // override action behaviour super.addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent e) { TristateCheckBox.this.iterateState(); } }); ActionMap actions = new ActionMapUIResource(); actions.put("pressed", new AbstractAction() { private static final long serialVersionUID = 1L; @Override public void actionPerformed(ActionEvent e) { TristateCheckBox.this.iterateState(); } }); actions.put("released", null); SwingUtilities.replaceUIActionMap(this, actions); }
private void iterateState() { //Maybe do nothing at all? if (!getModel().isEnabled()) { return; } grabFocus(); // Iterate state getTristateModel().iterateState(); // Fire ActionEvent int modifiers = 0; AWTEvent currentEvent = EventQueue.getCurrentEvent(); if (currentEvent instanceof InputEvent) { modifiers = ((InputEvent) currentEvent).getModifiers(); } else if (currentEvent instanceof ActionEvent) { modifiers = ((ActionEvent) currentEvent).getModifiers(); } fireActionPerformed(new ActionEvent(this, ActionEvent.ACTION_PERFORMED, getText(), System.currentTimeMillis(), modifiers)); }
private void setState(TristateState state) { //Set internal state this.state = state; displayState(); if (state == TristateState.INDETERMINATE && isEnabled()) { // force the events to fire // Send ChangeEvent fireStateChanged(); // Send ItemEvent int indeterminate = 3; fireItemStateChanged(new ItemEvent( this, ItemEvent.ITEM_STATE_CHANGED, this, indeterminate)); } }
public void setIndeterminate() { getTristateModel().setIndeterminate(); }
public TristateState getState() { return getTristateModel().getState(); }
void iterateState() { setState(state.next()); }
public void setIndeterminate() { setState(TristateState.INDETERMINATE); }
public boolean isIndeterminate() { return getTristateModel().isIndeterminate(); }
@Override public void setEnabled(boolean enabled) { super.setEnabled(enabled); // Restore state display displayState(); }
@Override public void setSelected(boolean selected) { setState(selected ? TristateState.SELECTED : TristateState.DESELECTED); }
public TristateButtonModel(TristateState initial, TristateCheckBox tristateCheckBox, boolean original) { setState(TristateState.DESELECTED); this.tristateCheckBox = tristateCheckBox; icon = new TristateCheckBoxIcon(); this.original = original; }