下面列出了javax.swing.SwingUtilities#getRoot ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@Override
public void eventDispatched(AWTEvent event) {
if (ignoreMouseEvents) {
return;
}
Component root = SwingUtilities.getRoot((Component) event.getSource());
if (root instanceof IRecordingArtifact || root.getName().startsWith("###")) {
return;
}
if (!(event instanceof MouseEvent)) {
return;
}
MouseEvent mouseEvent = (MouseEvent) event;
mouseEvent.consume();
if (event.getID() == MouseEvent.MOUSE_PRESSED) {
disposeOverlay();
Component mouseComponent = SwingUtilities.getDeepestComponentAt(mouseEvent.getComponent(), mouseEvent.getX(),
mouseEvent.getY());
if (mouseComponent == null) {
return;
}
mouseEvent = SwingUtilities.convertMouseEvent(mouseEvent.getComponent(), mouseEvent, mouseComponent);
setComponent(mouseComponent, mouseEvent.getPoint(), true);
return;
}
}
@Override
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if (source == editLayout) {
proj.setCurrentCircuit(circuit);
proj.getFrame().setEditorView(Frame.EDIT_LAYOUT);
} else if (source == editAppearance) {
proj.setCurrentCircuit(circuit);
proj.getFrame().setEditorView(Frame.EDIT_APPEARANCE);
} else if (source == analyze) {
ProjectCircuitActions.doAnalyze(proj, circuit);
} else if (source == stats) {
JFrame frame = (JFrame) SwingUtilities.getRoot(this);
StatisticsDialog.show(frame, proj.getLogisimFile(), circuit);
} else if (source == main) {
ProjectCircuitActions.doSetAsMainCircuit(proj, circuit);
} else if (source == remove) {
ProjectCircuitActions.doRemoveCircuit(proj, circuit);
}
}
public static void setAlignmentCentered(Component component, Component referredComponent) {
if(referredComponent == null) {
referredComponent = SwingUtilities.getRoot(component);
}
Point rootLocation = referredComponent.getLocation();
Dimension rootDimension = referredComponent.getSize();
Dimension componentDimension = component.getSize();
Point componentLocation = new Point(rootLocation);
int dx = (rootDimension.width - componentDimension.width) / 2;
int dy = (rootDimension.height - componentDimension.height) / 2;
componentLocation.translate(dx, dy);
component.setLocation(componentLocation);
}
@Override
public void addNotify() {
super.addNotify();
final Component parent = SwingUtilities.getRoot(this);
componentListener = new ComponentAdapter() {
@Override
public void componentMoved(ComponentEvent e) {
hidePopUps();
processComponentEvent(new ComponentEvent(JFXPanelEx.this, ComponentEvent.COMPONENT_MOVED));
}
@Override
public void componentResized(ComponentEvent e) {
hidePopUps();
processComponentEvent(new ComponentEvent(JFXPanelEx.this, ComponentEvent.COMPONENT_RESIZED));
processComponentEvent(new ComponentEvent(JFXPanelEx.this, ComponentEvent.COMPONENT_MOVED)); //is important!!!
}
};
parent.addComponentListener(componentListener);
}
public static void setAlignmentCentered(Component component, Component referredComponent) {
if(referredComponent == null) {
referredComponent = SwingUtilities.getRoot(component);
}
Point rootLocation = referredComponent.getLocation();
Dimension rootDimension = referredComponent.getSize();
Dimension componentDimension = component.getSize();
Point componentLocation = new Point(rootLocation);
int dx = (rootDimension.width - componentDimension.width) / 2;
int dy = (rootDimension.height - componentDimension.height) / 2;
componentLocation.translate(dx, dy);
component.setLocation(componentLocation);
}
public synchronized void run() {
while (true) {
try {
wait();
wait(delay);
if (source instanceof Component) {
parent = SwingUtilities.getRoot((Component) source);
} else if (source instanceof MenuComponent) {
MenuContainer mParent = ((MenuComponent) source).getParent();
if (mParent instanceof Component) {
parent = SwingUtilities.getRoot((Component) mParent);
}
}
if ((parent != null) && parent.isShowing()) {
parent.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
}
} catch (InterruptedException ie) {
}
}
}
public ContextMenuWindow showPopup(Component component, Point point) {
Component root = SwingUtilities.getRoot(component);
if (root instanceof Window) {
setContextMenu(new ContextMenuWindow((Window) root, recorder, finder));
} else {
throw new RuntimeException("Unknown root for component");
}
contextMenu.setComponent(component, point, true);
if (component instanceof JMenu) {
contextMenu.show(((JMenu) component).getParent(), point.x, point.y);
} else {
contextMenu.show(component, point.x, point.y);
}
return contextMenu;
}
protected void initLocalData(){
differ = new AnnotationDiffer();
pairings = new ArrayList<AnnotationDiffer.Pairing>();
keyCopyValueRows = new ArrayList<Boolean>();
resCopyValueRows = new ArrayList<Boolean>();
significantFeatures = new HashSet<String>();
keyDoc = null;
resDoc = null;
Component root = SwingUtilities.getRoot(AnnotationDiffGUI.this);
isStandalone = (root instanceof MainFrame);
}
private void handleBitPress(InstanceState state, int bit, MouseEvent e) {
PinAttributes attrs = (PinAttributes) state.getAttributeSet();
if (!attrs.isInput())
return;
java.awt.Component sourceComp = e.getComponent();
if (sourceComp instanceof Canvas && !state.isCircuitRoot()) {
Canvas canvas = (Canvas) e.getComponent();
CircuitState circState = canvas.getCircuitState();
java.awt.Component frame = SwingUtilities.getRoot(canvas);
int choice = JOptionPane.showConfirmDialog(frame, Strings.get("pinFrozenQuestion"),
Strings.get("pinFrozenTitle"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE);
if (choice == JOptionPane.OK_OPTION) {
circState = circState.cloneState();
canvas.getProject().setCircuitState(circState);
state = circState.getInstanceState(state.getInstance());
} else {
return;
}
}
PinState pinState = getState(state);
Value val = pinState.sending.get(bit);
if (val == Value.FALSE) {
val = Value.TRUE;
} else if (val == Value.TRUE) {
val = attrs.threeState ? Value.UNKNOWN : Value.FALSE;
} else {
val = Value.FALSE;
}
pinState.sending = pinState.sending.set(bit, val);
state.fireInvalidated();
}
@Override
public void removeNotify() {
super.removeNotify();
final Component parent = SwingUtilities.getRoot(this);
if (parent != null){
parent.removeComponentListener(componentListener);
}
}
@Override
public boolean stopCellEditing() {
String s = cell.toString();
Window ancestorWindow = (Window)SwingUtilities.getRoot(cell);
// #236458: options are now saved asynchronously. If the dialog was to
if (ancestorWindow == null) {
return true;
}
// HACK: if this Editor creates a dialog, it will lose the focus and Swing
// will remove the editor, calling JTable.cancelEditing. Any re-selections performed
// by the JTable will occur BEFORE the dialog is finished, so we need to
// reestablish the column selection later from here.
// This binds the BCEditor to the KeymapTable layout / internals.
JTable parent = (JTable)cell.getParent();
ShortcutAction sca = (ShortcutAction) action;
Set<ShortcutAction> conflictingAction = model.getMutableModel().findActionForShortcutPrefix(s);
conflictingAction.remove(sca); //remove the original action
Collection<ShortcutAction> sameScopeActions = model.getMutableModel().filterSameScope(conflictingAction, sca);
if (!conflictingAction.isEmpty()) {
if (!SwingUtilities.isEventDispatchThread()) {
// #236458: options are now saved asynchronously, off EDT. If we display dialog, the IDE will lock up.
cell.getTextField().setText(orig);
fireEditingCanceled();
return true;
}
//there is a conflicting action, show err dialog
Object overrride = overrride(conflictingAction, sameScopeActions);
// bring the focus back
ancestorWindow.toFront();
parent.requestFocus();
if (overrride.equals(DialogDescriptor.YES_OPTION)) {
for (ShortcutAction sa : conflictingAction) {
removeConflictingShortcut(sa, s); //remove all conflicting shortcuts
}
//proceed with override
} else if (overrride == DialogDescriptor.CANCEL_OPTION) {
cell.getTextField().setText(orig);
fireEditingCanceled();
setBorderEmpty();
return true;
}
// NO_OPTION fallls through and adds additional shortcut.
}
cell.getTextField().removeActionListener(delegate);
cell.getTextField().removeKeyListener(escapeAdapter);
model.getMutableModel().removeShortcut((ShortcutAction) action, orig);
if (!(s.length() == 0)) // do not add empty shortcuts
model.getMutableModel().addShortcut((ShortcutAction) action, s);
fireEditingStopped();
setBorderEmpty();
model.update();
return true;
}
private boolean isInResizeArea(MouseEvent event) {
if (comp == null || side == null
|| (SwingUtilities.getRoot(comp) == null && SwingUtilities.getWindowAncestor( comp ) == null) ) {
return false;
}
Point leftTop = new Point(0, 0);
leftTop = SwingUtilities.convertPoint(comp, leftTop, SwingUtilities.getRoot(comp));
Component comp2 = event.getComponent();
if (!comp2.isDisplayable()) {
//#54329 under specific conditions the component in the event can be gone.
return false;
}
Point evtPoint = SwingUtilities.convertPoint(comp2,
event.getPoint(), SwingUtilities.getRoot(comp2));
if (Constants.BOTTOM.equals(side)) {
if (evtPoint.x > leftTop.x && evtPoint.x < (leftTop.x + comp.getBounds().width)) {
if ( Math.abs(evtPoint.y - leftTop.y) < RESIZE_BUFFER) {
return true;
}
}
}
if (Constants.TOP.equals(side)) {
if (evtPoint.x > leftTop.x && evtPoint.x < (leftTop.x + comp.getBounds().width)) {
if ( Math.abs(evtPoint.y - (leftTop.y + comp.getBounds().height)) < RESIZE_BUFFER) {
return true;
}
}
}
if (Constants.LEFT.equals(side)) {
if (evtPoint.y > leftTop.y && evtPoint.y < (leftTop.y + comp.getBounds().height)) {
int right = comp.getBounds().width + leftTop.x;
if (Math.abs(evtPoint.x - right) < RESIZE_BUFFER) {
return true;
}
}
}
if (Constants.RIGHT.equals(side)) {
if (evtPoint.y > leftTop.y && evtPoint.y < (leftTop.y + comp.getBounds().height)) {
if ( Math.abs(evtPoint.x - leftTop.x) < RESIZE_BUFFER) {
return true;
}
}
}
return false;
}
protected void edit() {
if (menu != null) {
menu.setVisible(false);
menu = null;
}
AttributeEditorDialog dialog;
Component c = null;
if (table != null)
c = SwingUtilities.getRoot(table);
if (c instanceof JDialog) {
dialog = new AttributeEditorDialog((JDialog) c, rowSet.getEngine(),
attribute, element, framework, framework.getAccessRules(),
value) {
/**
*
*/
private static final long serialVersionUID = -6963390831133166460L;
@Override
protected void closed() {
cancelCellEditing();
// stopCellEditing();
}
};
} else if (c instanceof JFrame) {
dialog = new AttributeEditorDialog((JFrame) c, rowSet.getEngine(),
attribute, element, framework, framework.getAccessRules(),
value) {
/**
*
*/
private static final long serialVersionUID = -6963390831133166460L;
@Override
protected void closed() {
cancelCellEditing();
// stopCellEditing();
}
};
} else {
dialog = new AttributeEditorDialog(framework.getMainFrame(),
rowSet.getEngine(), attribute, element, framework,
framework.getAccessRules(), value) {
/**
*
*/
private static final long serialVersionUID = -6963390831133166460L;
@Override
protected void closed() {
cancelCellEditing();
// stopCellEditing();
}
};
}
dialog.setModal(true);
dialog.setVisible(true);
try {
dialog.getAttributeEditor().close();
} catch (Exception e) {
e.printStackTrace();
}
// cancelCellEditing();
}
protected void edit() {
AttributeEditorDialog dialog;
Component c = null;
if (table != null)
c = SwingUtilities.getRoot(table);
if (c instanceof JDialog) {
dialog = new AttributeEditorDialog((JDialog) c, engine, attribute,
element, framework, rules, getMetaValue()) {
/**
*
*/
private static final long serialVersionUID = -6963390831133166460L;
@Override
protected void closed() {
stopCellEditing();
}
@Override
protected void onApply(Object value) {
super.onApply(value);
DialogedTableCellEditor.this.onApply(value);
}
};
} else if (c instanceof JFrame) {
dialog = new AttributeEditorDialog((JFrame) c, engine, attribute,
element, framework, rules, getMetaValue()) {
/**
*
*/
private static final long serialVersionUID = -6963390831133166460L;
@Override
protected void closed() {
stopCellEditing();
}
@Override
protected void onApply(Object value) {
super.onApply(value);
DialogedTableCellEditor.this.onApply(value);
}
};
} else {
dialog = new AttributeEditorDialog(framework.getMainFrame(),
engine, attribute, element, framework, rules,
getMetaValue()) {
/**
*
*/
private static final long serialVersionUID = -6963390831133166460L;
@Override
protected void closed() {
stopCellEditing();
}
@Override
protected void onApply(Object value) {
super.onApply(value);
DialogedTableCellEditor.this.onApply(value);
}
};
}
dialog.setVisible(true);
}
private Action createNetworkAssistantConfigurationAction() {
final Action exit = new AbstractAction() {
@Override
public void actionPerformed(ActionEvent ev) {
JFrame networkFrame = (JFrame) SwingUtilities.getRoot((Component) ev.getSource());
final JPanel pane = new JPanel();
pane.setLayout(new GridLayout(1, 2, 10, 10));
final JLabel portNumberLbl = new JLabel(Babylon.translate("connection.settings.portNumber"));
portNumberLbl.setToolTipText(Babylon.translate("connection.settings.portNumber.tooltip"));
final JTextField portNumberTextField = new JTextField();
portNumberTextField.setText(String.valueOf(networkConfiguration.getPort()));
pane.add(portNumberLbl);
pane.add(portNumberTextField);
final boolean ok = DialogFactory.showOkCancel(networkFrame, Babylon.translate("connection.network.settings"), pane, () -> {
final String portNumber = portNumberTextField.getText();
if (portNumber.isEmpty()) {
return Babylon.translate("connection.settings.emptyPortNumber");
}
return SystemUtilities.isValidPortNumber(portNumber) ? null : Babylon.translate("connection.settings.invalidPortNumber");
});
if (ok) {
final NetworkAssistantConfiguration xnetworkConfiguration = new NetworkAssistantConfiguration(
Integer.parseInt(portNumberTextField.getText()));
if (!xnetworkConfiguration.equals(networkConfiguration)) {
networkConfiguration = xnetworkConfiguration;
networkConfiguration.persist();
network.reconfigure(networkConfiguration);
}
}
}
};
exit.putValue(Action.NAME, "networkAssistantConfiguration");
exit.putValue(Action.SHORT_DESCRIPTION, Babylon.translate("connection.network.settings"));
exit.putValue(Action.SMALL_ICON, ImageUtilities.getOrCreateIcon(ImageNames.NETWORK_SETTINGS));
return exit;
}
private Action createCaptureConfigurationAction() {
final Action configure = new AbstractAction() {
@Override
public void actionPerformed(ActionEvent ev) {
JFrame captureFrame = (JFrame) SwingUtilities.getRoot((Component) ev.getSource());
final JPanel pane = new JPanel();
pane.setLayout(new GridLayout(2, 2, 10, 10));
final JLabel tickLbl = new JLabel(Babylon.translate("tick"));
tickLbl.setToolTipText(Babylon.translate("tick.tooltip"));
final JTextField tickTextField = new JTextField();
tickTextField.setText(String.valueOf(captureEngineConfiguration.getCaptureTick()));
pane.add(tickLbl);
pane.add(tickTextField);
final JLabel grayLevelsLbl = new JLabel(Babylon.translate("grays"));
final JComboBox<Gray8Bits> grayLevelsCb = new JComboBox<>(Gray8Bits.values());
grayLevelsCb.setSelectedItem(captureEngineConfiguration.getCaptureQuantization());
pane.add(grayLevelsLbl);
pane.add(grayLevelsCb);
final boolean ok = DialogFactory.showOkCancel(captureFrame, Babylon.translate("capture.settings"), pane, () -> {
final String tick = tickTextField.getText();
if (tick.isEmpty()) {
return Babylon.translate("tick.msg1");
}
try {
Integer.valueOf(tick);
} catch (NumberFormatException ex) {
return Babylon.translate("tick.msg2");
}
return null;
});
if (ok) {
final CaptureEngineConfiguration newCaptureEngineConfiguration = new CaptureEngineConfiguration(Integer.parseInt(tickTextField.getText()),
(Gray8Bits) grayLevelsCb.getSelectedItem());
if (!newCaptureEngineConfiguration.equals(captureEngineConfiguration)) {
captureEngineConfiguration = newCaptureEngineConfiguration;
captureEngineConfiguration.persist();
sendCaptureConfiguration(captureEngineConfiguration);
}
}
}
};
configure.putValue(Action.NAME, "configureCapture");
configure.putValue(Action.SHORT_DESCRIPTION, Babylon.translate("capture.settings.msg"));
configure.putValue(Action.SMALL_ICON, ImageUtilities.getOrCreateIcon(ImageNames.CAPTURE_SETTINGS));
return configure;
}
private Action createComressionConfigurationAction() {
final Action configure = new AbstractAction() {
@Override
public void actionPerformed(ActionEvent ev) {
JFrame compressionFrame = (JFrame) SwingUtilities.getRoot((Component) ev.getSource());
final JPanel pane = new JPanel();
pane.setLayout(new GridLayout(4, 2, 10, 10));
final JLabel methodLbl = new JLabel(Babylon.translate("compression.method"));
// testing only: final JComboBox<CompressionMethod> methodCb = new JComboBox<>(CompressionMethod.values());
final JComboBox<CompressionMethod> methodCb = new JComboBox<>(Stream.of(CompressionMethod.values()).filter(e -> !e.equals(CompressionMethod.NONE)).toArray(CompressionMethod[]::new));
methodCb.setSelectedItem(compressorEngineConfiguration.getMethod());
pane.add(methodLbl);
pane.add(methodCb);
final JLabel useCacheLbl = new JLabel(Babylon.translate("compression.cache.usage"));
final JCheckBox useCacheCb = new JCheckBox();
useCacheCb.setSelected(compressorEngineConfiguration.useCache());
pane.add(useCacheLbl);
pane.add(useCacheCb);
final JLabel maxSizeLbl = new JLabel(Babylon.translate("compression.cache.max"));
maxSizeLbl.setToolTipText(Babylon.translate("compression.cache.max.tooltip"));
final JTextField maxSizeTf = new JTextField(String.valueOf(compressorEngineConfiguration.getCacheMaxSize()));
pane.add(maxSizeLbl);
pane.add(maxSizeTf);
final JLabel purgeSizeLbl = new JLabel(Babylon.translate("compression.cache.purge"));
purgeSizeLbl.setToolTipText(Babylon.translate("compression.cache.purge.tooltip"));
final JTextField purgeSizeTf = new JTextField(String.valueOf(compressorEngineConfiguration.getCachePurgeSize()));
pane.add(purgeSizeLbl);
pane.add(purgeSizeTf);
useCacheCb.addActionListener(ev1 -> {
maxSizeLbl.setEnabled(useCacheCb.isSelected());
maxSizeTf.setEnabled(useCacheCb.isSelected());
purgeSizeLbl.setEnabled(useCacheCb.isSelected());
purgeSizeTf.setEnabled(useCacheCb.isSelected());
});
maxSizeLbl.setEnabled(useCacheCb.isSelected());
maxSizeTf.setEnabled(useCacheCb.isSelected());
purgeSizeLbl.setEnabled(useCacheCb.isSelected());
purgeSizeTf.setEnabled(useCacheCb.isSelected());
final boolean ok = DialogFactory.showOkCancel(compressionFrame, Babylon.translate("compression.settings"), pane, () -> {
final String max = maxSizeTf.getText();
if (max.isEmpty()) {
return Babylon.translate("compression.cache.max.msg1");
}
final int maxValue;
try {
maxValue = Integer.parseInt(max);
} catch (NumberFormatException ex) {
return Babylon.translate("compression.cache.max.msg2");
}
if (maxValue <= 0) {
return Babylon.translate("compression.cache.max.msg3");
}
return validatePurgeValue(purgeSizeTf, maxValue);
});
if (ok) {
final CompressorEngineConfiguration newCompressorEngineConfiguration = new CompressorEngineConfiguration((CompressionMethod) methodCb.getSelectedItem(),
useCacheCb.isSelected(), Integer.parseInt(maxSizeTf.getText()), Integer.parseInt(purgeSizeTf.getText()));
if (!newCompressorEngineConfiguration.equals(compressorEngineConfiguration)) {
compressorEngineConfiguration = newCompressorEngineConfiguration;
compressorEngineConfiguration.persist();
sendCompressorConfiguration(compressorEngineConfiguration);
}
}
}
};
configure.putValue(Action.NAME, "configureCompression");
configure.putValue(Action.SHORT_DESCRIPTION, Babylon.translate("compression.settings.msg"));
configure.putValue(Action.SMALL_ICON, ImageUtilities.getOrCreateIcon(ImageNames.COMPRESSION_SETTINGS));
return configure;
}
void setCursor(int c) {
final Component root = SwingUtilities.getRoot(this);
if (root!=null)
root.setCursor(Cursor.getPredefinedCursor(c));
}
public void sendScreenEMail() {
new SendEMailDialog((JFrame)SwingUtilities.getRoot(this),this);
}