本文将分享在围绕屏幕移动球的情况下,如何正确处理JComponent的按键和重绘?的详细内容,此外,我们还将为大家带来关于Angular2:如何在该Component中访问自定义Component的F
本文将分享在围绕屏幕移动球的情况下,如何正确处理JComponent的按键和重绘?的详细内容,此外,我们还将为大家带来关于Angular 2:如何在该Component中访问自定义Component的FormControl实例?、asp.net-mvc – 存储库模式 – 如何正确处理JOIN和复杂查询?、com.intellij.openapi.components.BaseComponent的实例源码、com.intellij.openapi.components.ExportableApplicationComponent的实例源码的相关知识,希望对你有所帮助。
本文目录一览:- 在围绕屏幕移动球的情况下,如何正确处理JComponent的按键和重绘?
- Angular 2:如何在该Component中访问自定义Component的FormControl实例?
- asp.net-mvc – 存储库模式 – 如何正确处理JOIN和复杂查询?
- com.intellij.openapi.components.BaseComponent的实例源码
- com.intellij.openapi.components.ExportableApplicationComponent的实例源码
在围绕屏幕移动球的情况下,如何正确处理JComponent的按键和重绘?
我以为我会尝试编写一个可以绘制球的程序,并在按下箭头键时将球沿着屏幕上的方向移动。首先,我开始尝试制作一个仅执行“向上”箭头键移动的程序。
我一直在寻找解决方案,但无法弄清楚这段代码有什么问题。我不知道这是我的输入和动作图出现问题(即程序识别按键的问题)还是JComponent和JFrame类如何在摆动中工作的问题。我以为也许这个问题也可能是重点。我真的不知道如何分辨组件何时具有焦点。我认为该键已设置为CNTRL
+ Y而不是暂时设置为上,只是因为在某些时候我认为这可能是因为我的字符串在输入映射器中指定了向上箭头。
在这一点上,我很沮丧,我只是想让该死的事情去 做某事 ,所以我使用的输入映射超出了必要。
代码如下,它很短,格式很糟糕(对不起):
import java.util.*;import java.awt.*;import java.awt.geom.*;import java.awt.event.*;import javax.swing.*;class BallMover{ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { BallFrame frame = new BallFrame(); } }); }}class BallFrame extends JFrame{ private static final int DEFAULT_WIDTH = 500; private static final int DEFAULT_HEIGHT = 500; private BallComponent comp; public BallFrame() { super.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); super.setSize(this.DEFAULT_WIDTH, this.DEFAULT_HEIGHT); super.setResizable(false); super.add(new BallComponent()); super.setVisible(true); super.setFocusable(true); }}class BallComponent extends JComponent{ private Ellipse2D.Double ellipse; private double x = 225; private double y = 225; private ActionPress actionPress; public BallComponent() { super(); super.setFocusable(true); InputMap imap1 = this.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); imap1.put(KeyStroke.getKeyStroke("ctrl Y"), "keyUp1"); InputMap imap2 = this.getInputMap(JComponent.WHEN_FOCUSED); imap1.put(KeyStroke.getKeyStroke("ctrl Y"), "keyUp2"); InputMap imap3 = this.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW); imap1.put(KeyStroke.getKeyStroke("ctrl Y"), "keyUp3"); ActionMap amap = this.getActionMap(); amap.put("keyUp1", actionPress); amap.put("keyUp2", actionPress); amap.put("keyUp3", actionPress); } public void paintComponent(Graphics g) { super.repaint(); // clear component // Graphics2D g2d = (Graphics2D)g; this.ellipse = new Ellipse2D.Double(x, y, 50, 50); g2d.fill(this.ellipse); } private class ActionPress extends AbstractAction { public void actionPerformed(ActionEvent event) { y = y + 10; ellipse = new Ellipse2D.Double(x, y, 50, 50); repaint(); } } }
答案1
小编典典似乎您从未初始化过actionPress
-尝试将其添加到BallComponent构造函数中:
actionPress = new ActionPress();
即,您的构造函数将如下所示
public BallComponent(){ super(); super.setFocusable(true); InputMap imap1 = this.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); imap1.put(KeyStroke.getKeyStroke("ctrl Y"), "keyUp1"); InputMap imap2 = this.getInputMap(JComponent.WHEN_FOCUSED); imap1.put(KeyStroke.getKeyStroke("ctrl Y"), "keyUp2"); InputMap imap3 = this.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW); imap1.put(KeyStroke.getKeyStroke("ctrl Y"), "keyUp3"); actionPress = new ActionPress(); ActionMap amap = this.getActionMap(); amap.put("keyUp1", actionPress); amap.put("keyUp2", actionPress); amap.put("keyUp3", actionPress);}
Angular 2:如何在该Component中访问自定义Component的FormControl实例?
<my-control name="something" [(ngModel)]="model.something" required></my-control>
而不是每次都重复这个:
<divhttps://www.jb51.cc/tag/Feed/" target="_blank">Feedback" [ngClass]="{'has-success': someInput.valid,'has-error': someInput.invalid && someInput.dirty}"> <labelfor="someId">{{label || 'Some Input'}}</label> <input type="test"id="someId" placeholder="Some Input" [ngModel]="value" (ngModel)="onChange($event)" name="someInput" required #someInput="ngModel" minlength="8"/> <spanhttps://www.jb51.cc/tag/Feed/" target="_blank">Feedback" aria-hidden="true" [ngClass]="{'glyphicon-ok': someInput.valid,'glyphicon-remove': someInput.invalid && someInput.dirty}"></span> <div [hidden]="someInput.valid || someInput.pristine || !someInput.errors.required">Some Input is required</div> <div [hidden]="someInput.valid || someInput.pristine || !someInput.errors.minlength">Some Input must be at least 8 characters</div> </div>
所以我通过自定义组件实现了以下有关如何在线创建自定义组件的文章:
https://blog.thoughtram.io/angular/2016/07/27/custom-form-controls-in-angular-2.html
缺少的是能够将验证移出组件,但允许自定义组件处理该验证的显示.因此,如果你看一下我的目的是允许组件的用户指定验证而不是让组件强加特定的验证(注意某些验证是组件固有的,例如电子邮件地址组件会验证它是一封没有用户指定的电子邮件).请注意,必需的是该客户组件的使用情况.
那么如何在该组件的定义中获得对自定义组件的FormControl的引用?注意:我理解如何访问模板的FormControl实例中的输入字段,因为上面的代码完全证明了这一点.我要求的是模板所在的自定义控件的FormControl实例.在我引用的文章中,它将是CounterInputComponent的FormControl.
解决方法
@ViewChild(NgModel) model: NgModel;
然后你可以通过以下方式访问FormControl:
this.model.control
asp.net-mvc – 存储库模式 – 如何正确处理JOIN和复杂查询?
在通用存储库模型(IRepository)和特定存储库模型之间,我选择了特定的选项,因为我认为ORM(在我们的例子中是EF)作为通用存储库模式本身,所以增加另一个通用存储库是没有意义的,而是将存储库定制到域的需求.
问题是我有几个(〜10)个表,每个都有很多行(百万),我需要执行JOIN,所以使用IList或IEnumerable是不可行的选择.
我的理解(和我的观点)是IQueryable不应该离开存储库(“DAL中会发生什么,应该保留在DAL”).暴露IQueryable并在LINQ中使用它可能会更简单,但是它强烈地违反了分离问题并破坏了存储库的作用 – 在这种情况下,服务将与存储库一样做.要选这几个,这些文章备份了这个观点(或者相信信念):
To return IQueryable<T> or not return IQueryable<T>
Should I return IEnumerable<T> or IQueryable<T> from my DAL?
http://www.shawnmclean.com/blog/2011/06/iqueryable-vs-ienumerable-in-the-repository-pattern/
http://blog.ploeh.dk/2012/03/26/IQueryableTisTightCoupling/
还有类似的问题和解决方案,例如How to join Multiple tables using Repository Pattern & Entity Framework?提示.Include(),但是这不是许多表中重载表和连接的选项 – 每个JOIN,我们使用子选择来限制实际加入的内容.
这个问题(答案和评论) – How can I query cross tables with Repository Pattern? – 基本上提出了基于任务的差异化:为JOINS查询创建一个Repository,并为每个实体操纵“常规”存储库.
我看到我们有这些选择:
>在服务中暴露IQueryable和执行JOIN复杂查询;我真诚地觉得这是反模式,我不喜欢这样.
>不要在这10个表中使用Repository并在服务中执行查询;一些文章建议使用EF是足够的(例如Is it okay to bypass the repository pattern for complex queries?),我不同意.
>使用基于任务的差异化,不要限制存储库1:1 repo:entity(我赞成这个选项)
>完全不一样的东西
那么 – 你会建议什么?一次又一次,谢谢.
解决方法
>如何与(1)不同?仍然是同一个问题.
>有点靠近…
>使用查询对象模式.将复杂查询封装在与存储库一起存在的基于任务的对象中.它可以返回为视图而不是域对象优化的DTO.
>严格依靠QO将引导您进入称为CQRS – 命令查询责任分离的体系结构.
还有一件事.实体没有1:1的匹配:repo.只有聚合应该有一个存储库,而不是每一个实体.
com.intellij.openapi.components.BaseComponent的实例源码
private void registerComponentInstance(@NotNull Object instance) { myInstantiatedComponentCount++; if (instance instanceof com.intellij.openapi.disposable) { disposer.register(this,(com.intellij.openapi.disposable)instance); } if (!(instance instanceof BaseComponent)) { return; } BaseComponent baseComponent = (BaseComponent)instance; String componentName = baseComponent.getComponentName(); if (myNametoComponent.containsKey(componentName)) { BaseComponent loadedComponent = myNametoComponent.get(componentName); // component may have been already loaded by picocontainer,so fire error only if components are really different if (!instance.equals(loadedComponent)) { LOG.error("Component name collision: " + componentName + " " + loadedComponent.getClass() + " and " + instance.getClass()); } } else { myNametoComponent.put(componentName,baseComponent); } myBaseComponents.add(baseComponent); }
@Nullable private AbstractVcs getInstance(@NotNull Project project,@NotNull String vcsClass) { try { final Class<? extends AbstractVcs> foundClass = findClass(vcsClass); final Class<?>[] interfaces = foundClass.getInterfaces(); for (Class<?> anInterface : interfaces) { if (BaseComponent.class.isAssignableFrom(anInterface)) { return PeriodicalTasksCloser.getInstance().safeGetComponent(project,foundClass); } } return instantiate(vcsClass,project.getpicocontainer()); } catch (ProcessCanceledException pce) { throw pce; } catch(Exception e) { LOG.error(e); return null; } }
public AbstractVcs getVcs(Project project) { if (myVcs == null) { try { final Class<? extends AbstractVcs> foundClass = findClass(vcsClass); final Class<?>[] interfaces = foundClass.getInterfaces(); for (Class<?> anInterface : interfaces) { if (BaseComponent.class.isAssignableFrom(anInterface)) { myVcs = PeriodicalTasksCloser.getInstance().safeGetComponent(project,foundClass); myVcs = VcsActiveEnvironmentsProxy.proxyVcs(myVcs); return myVcs; } } myVcs = VcsActiveEnvironmentsProxy.proxyVcs((AbstractVcs)instantiate(vcsClass,project.getpicocontainer())); } catch(Exception e) { LOG.error(e); return null; } } return myVcs; }
@Nullable private AbstractVcs getInstance(@Nonnull Project project,@Nonnull String vcsClass) { try { final Class<? extends AbstractVcs> foundClass = findClass(vcsClass); final Class<?>[] interfaces = foundClass.getInterfaces(); for (Class<?> anInterface : interfaces) { if (BaseComponent.class.isAssignableFrom(anInterface)) { return PeriodicalTasksCloser.getInstance().safeGetComponent(project,project.getpicocontainer()); } catch (ProcessCanceledException pce) { throw pce; } catch(Exception e) { LOG.error(e); return null; } }
@Override public void updateJavaParameters(runconfigurationBase configuration,JavaParameters params,RunnerSettings runnerSettings) { if (!isApplicableFor(configuration)) { return; } ApplicationConfiguration appConfiguration = (ApplicationConfiguration) configuration; SnapShooterConfigurationSettings settings = appConfiguration.getUserData(SnapShooterConfigurationSettings.SNAP_SHOOTER_KEY); if (settings == null) { settings = new SnapShooterConfigurationSettings(); appConfiguration.putUserData(SnapShooterConfigurationSettings.SNAP_SHOOTER_KEY,settings); } if (appConfiguration.ENABLE_SWING_INSPECTOR) { settings.setLastPort(NetUtils.tryToFindAvailableSocketPort()); } if (appConfiguration.ENABLE_SWING_INSPECTOR && settings.getLastPort() != -1) { params.getProgramParametersList().prepend(appConfiguration.MAIN_CLASS_NAME); params.getProgramParametersList().prepend(Integer.toString(settings.getLastPort())); // add +1 because idea_rt.jar will be added as the last entry to the classpath params.getProgramParametersList().prepend(Integer.toString(params.getClasspath().getPathList().size() + 1)); Set<String> paths = new TreeSet<String>(); paths.add(PathUtil.getJarPathForClass(SnapShooter.class)); // ui-designer-impl paths.add(PathUtil.getJarPathForClass(BaseComponent.class)); // appcore-api paths.add(PathUtil.getJarPathForClass(ProjectComponent.class)); // openapi paths.add(PathUtil.getJarPathForClass(LwComponent.class)); // UIDesignerCore paths.add(PathUtil.getJarPathForClass(GridConstraints.class)); // forms_rt paths.add(PathUtil.getJarPathForClass(PaletteGroup.class)); // openapi paths.add(PathUtil.getJarPathForClass(LafManagerListener.class)); // ui-impl paths.add(PathUtil.getJarPathForClass(DataProvider.class)); // action-system-openapi paths.add(PathUtil.getJarPathForClass(XmlStringUtil.class)); // idea paths.add(PathUtil.getJarPathForClass(Navigatable.class)); // pom paths.add(PathUtil.getJarPathForClass(AreaInstance.class)); // extensions paths.add(PathUtil.getJarPathForClass(Formlayout.class)); // jgoodies paths.addAll(PathManager.getUtilClasspath()); for(String path: paths) { params.getClasspath().addFirst(path); } params.setMainClass("com.intellij.uiDesigner.snapShooter.SnapShooter"); } }
ComponentType(Class<? extends BaseComponent> clazz,@NonNls String name,@PropertyKey(resourceBundle = "org.jetbrains.idea.devkit.DevKitBundle") String propertyKey) { myPropertyKey = propertyKey; myClassName = clazz.getName(); myName = name; }
ComponentType(Class<? extends BaseComponent> clazz,@PropertyKey(resourceBundle = "org.jetbrains.idea.devkit.DevKitBundle") String propertyKey) { myPropertyKey = propertyKey; myClassName = clazz.getName(); myName = name; }
@Override public BaseComponent getComponent(@NotNull String name) { return null; }
@Override public BaseComponent getComponent(@NotNull String s) { return null; }
@Override public BaseComponent getComponent(@NotNull String name) { return null; }
@Override public BaseComponent getComponent(@NotNull String name) { return null; }
@Override public synchronized BaseComponent getComponent(@NotNull String name) { return myNametoComponent.get(name); }
@Override public Object getComponentInstance(picocontainer picocontainer) throws PicoInitializationException,PicoIntrospectionException,ProcessCanceledException { Object instance = myInitializedComponentInstance; if (instance != null) { return instance; } try { //noinspection SynchronizeOnThis synchronized (this) { instance = myInitializedComponentInstance; if (instance != null) { return instance; } long startTime = System.nanoTime(); instance = super.getComponentInstance(picocontainer); if (myInitializing) { String errorMessage = "Cyclic component initialization: " + getComponentKey(); if (myPluginId != null) { LOG.error(new PluginException(errorMessage,myPluginId)); } else { LOG.error(new Throwable(errorMessage)); } } try { myInitializing = true; registerComponentInstance(instance); ProgressIndicator indicator = getProgressIndicator(); if (indicator != null) { indicator.checkCanceled(); setProgressDuringInit(indicator); } initializeComponent(instance,false); if (instance instanceof BaseComponent) { ((BaseComponent)instance).initComponent(); } long ms = (System.nanoTime() - startTime) / 1000000; if (ms > 10 && logSlowComponents()) { LOG.info(instance.getClass().getName() + " initialized in " + ms + " ms"); } } finally { myInitializing = false; } myInitializedComponentInstance = instance; } } catch (ProcessCanceledException e) { throw e; } catch (Throwable t) { handleInitComponentError(t,((Class)getComponentKey()).getName(),myPluginId); } return instance; }
@Override public BaseComponent getComponent(@NotNull String s) { return null; }
@Override public BaseComponent getComponent(@NotNull String name) { return null; }
@Override public BaseComponent getComponent(@NotNull String name) { return null; }
@Override public BaseComponent getComponent(@NotNull String name) { return null; }
@Override public BaseComponent getComponent(@NotNull String name) { throw new UnsupportedOperationException(); }
@Override public void updateJavaParameters(runconfigurationBase configuration,settings); } if (appConfiguration.ENABLE_SWING_INSPECTOR) { try { settings.setLastPort(NetUtils.findAvailableSocketPort()); } catch(IOException ex) { settings.setLastPort(-1); } } if (appConfiguration.ENABLE_SWING_INSPECTOR && settings.getLastPort() != -1) { params.getProgramParametersList().prepend(appConfiguration.MAIN_CLASS_NAME); params.getProgramParametersList().prepend(Integer.toString(settings.getLastPort())); // add +1 because idea_rt.jar will be added as the last entry to the classpath params.getProgramParametersList().prepend(Integer.toString(params.getClasspath().getPathList().size() + 1)); Set<String> paths = new TreeSet<String>(); paths.add(PathUtil.getJarPathForClass(SnapShooter.class)); // ui-designer-impl paths.add(PathUtil.getJarPathForClass(BaseComponent.class)); // appcore-api paths.add(PathUtil.getJarPathForClass(ProjectComponent.class)); // openapi paths.add(PathUtil.getJarPathForClass(LwComponent.class)); // UIDesignerCore paths.add(PathUtil.getJarPathForClass(GridConstraints.class)); // forms_rt paths.add(PathUtil.getJarPathForClass(LafManagerListener.class)); // ui-impl paths.add(PathUtil.getJarPathForClass(DataProvider.class)); // action-system-openapi paths.add(PathUtil.getJarPathForClass(XmlStringUtil.class)); // idea paths.add(PathUtil.getJarPathForClass(Navigatable.class)); // pom paths.add(PathUtil.getJarPathForClass(AreaInstance.class)); // extensions paths.add(PathUtil.getJarPathForClass(Formlayout.class)); // jgoodies paths.addAll(PathManager.getUtilClasspath()); for(String path: paths) { params.getClasspath().addFirst(path); } params.setMainClass("com.intellij.uiDesigner.snapShooter.SnapShooter"); } }
@Override public BaseComponent getComponent(String name) { return null; }
@Override public void updateJavaParameters(runconfigurationBase configuration,OwnJavaParameters params,settings); } if (appConfiguration.ENABLE_SWING_INSPECTOR) { try { settings.setLastPort(NetUtils.findAvailableSocketPort()); } catch(IOException ex) { settings.setLastPort(-1); } } if (appConfiguration.ENABLE_SWING_INSPECTOR && settings.getLastPort() != -1) { params.getProgramParametersList().prepend(appConfiguration.MAIN_CLASS_NAME); params.getProgramParametersList().prepend(Integer.toString(settings.getLastPort())); // add +1 because idea_rt.jar will be added as the last entry to the classpath params.getProgramParametersList().prepend(Integer.toString(params.getClasspath().getPathList().size() + 1)); Set<String> paths = new TreeSet<String>(); paths.add(PathUtil.getJarPathForClass(SnapShooter.class)); // ui-designer-impl paths.add(PathUtil.getJarPathForClass(BaseComponent.class)); // appcore-api paths.add(PathUtil.getJarPathForClass(ProjectComponent.class)); // openapi paths.add(PathUtil.getJarPathForClass(LwComponent.class)); // UIDesignerCore paths.add(PathUtil.getJarPathForClass(GridConstraints.class)); // forms_rt paths.add(PathUtil.getJarPathForClass(LafManagerListener.class)); // ui-impl paths.add(PathUtil.getJarPathForClass(DataProvider.class)); // action-system-openapi paths.add(PathUtil.getJarPathForClass(XmlStringUtil.class)); // idea paths.add(PathUtil.getJarPathForClass(Navigatable.class)); // pom paths.add(PathUtil.getJarPathForClass(AreaInstance.class)); // extensions paths.add(PathUtil.getJarPathForClass(Formlayout.class)); // jgoodies paths.addAll(PathManager.getUtilClasspath()); for(String path: paths) { params.getClasspath().addFirst(path); } params.setMainClass("com.intellij.uiDesigner.snapShooter.SnapShooter"); } }
@Override public BaseComponent getComponent(String name) { throw new UnsupportedOperationException(); }
@Override public BaseComponent getComponent(String name) { return null; }
@Override public BaseComponent getComponent(@Nonnull String name) { return null; }
com.intellij.openapi.components.ExportableApplicationComponent的实例源码
public static Map<File,Set<ExportableComponent>> getRegisteredComponentsAndFiles(List<ExportableComponent> exportableComponents) { Map<File,Set<ExportableComponent>> filetoComponents = new HashMap<File,Set<ExportableComponent>>(); final List<ExportableComponent> components = new ArrayList<ExportableComponent>(Arrays.asList(ApplicationManager.getApplication().getComponents(ExportableApplicationComponent.class))); components.addAll(ServiceBean.loadServicesFromBeans(ExportableComponent.EXTENSION_POINT,ExportableComponent.class)); for (ExportableComponent component : components) { exportableComponents.add(component); final File[] exportFiles = component.getExportFiles(); for (File exportFile : exportFiles) { Set<ExportableComponent> componentsTied = filetoComponents.get(exportFile); if (componentsTied == null) { componentsTied = new HashSet<ExportableComponent>(); filetoComponents.put(exportFile,componentsTied); } componentsTied.add(component); } } return filetoComponents; }
关于在围绕屏幕移动球的情况下,如何正确处理JComponent的按键和重绘?的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于Angular 2:如何在该Component中访问自定义Component的FormControl实例?、asp.net-mvc – 存储库模式 – 如何正确处理JOIN和复杂查询?、com.intellij.openapi.components.BaseComponent的实例源码、com.intellij.openapi.components.ExportableApplicationComponent的实例源码等相关内容,可以在本站寻找。
本文标签: