我的理解:与Swing中的大多数组件/操作不同,对JComponent.repaint()的调用是线程安全的,即尽管重绘请求是从另一个线程发出的(即不是来自EDT),但实际绘制仅在EDT中发生。下面的代码片段演示了这一点。publicclassPaintingDemo{publicstaticvoidmain(String[]args){finalJFrameframe=newJFrame();finalJPanelp=newMyPanel();SwingUtilities.invokeLater(newRunnable(){@Overridepublicvoidrun(){frame
我正在寻找一种自动检测代码中违反Swing单线程策略的方法。我正在寻找与您在swing应用程序运行时放入VM中的一些AOP代码类似的内容,并让它记录在EDT之外修改swing组件的任何位置。我不是AOP专家,但我想围绕每个java.swing.*类创建一个AOP代理,看起来像AOP_before(Methodm,Objectargs[]){if(!isEventDispatchThread(Thread.currentThread()){logStack(newRuntimeException("violation!"));}invoke(m,args);}有人知道执行此操作的项目或实
我有一个使用DefaultListModel的jList,我用从列表中获得的对象填充它(上下文:对象是ABM系统中的一种代理)。是否可以更改jList中对象的显示名称?我还没有找到关于这个的任何东西...... 最佳答案 如果您想要查看的信息(而不是toString()吐出的任何信息)包含在对象本身中,最直接的“Swing”方法是通过使用ListCellRenderer来实现这一点。.将ListCellRenderer(实际上是任何CellRenderer)想象成用于绘制列表中每个对象的橡皮图章。对象被传入,你设置组件,组件绘制你的
当我在Java6下运行我的swingGUI应用程序时,它们会自动为所有字体使用我配置的子像素抗锯齿设置。结果比标准AA选项有了很大改进。但是当我绘制图像时,我无法找到初始化图形上下文以使用系统的AA配置的方法。尝试使用Java的不同AA提示是一个失败的原因,因为没有一种子像素方法适用于所有用户。有没有什么方法可以为给定的图形上下文继承系统AA设置,而不必选择一个并显式设置提示?目前我必须使用GASPAA来避免标准AA给小字体带来的可怕结果。我试过不为文本AA设置任何内容,并且根本不设置任何AA提示。更新2010-01-05我想我已经确定了这一点;子像素AA提示似乎只有在直接绘制到AWT
我正在用javaswing开发一个聊天应用程序,我想在其中添加笑脸符号,有人可以帮我吗? 最佳答案 AutoreplacesmilestextwithappropriateimagesinJEditorPaneTosupporttheautoreplacingweneedaJEditorPanewithStyledEditorKit(orextensionclass)toprovideimagesintext.WejustaddaDocumentListenertoprocesstextinsertevents.Afterinser
我想将一些任意文本转换为形状(java.awt.Shape),然后描边/填充形状以绘制它。我该怎么做? 最佳答案 嗯,我不知道这个问题的答案,但在使用Eclipse内容辅助进行一些调整和探索之后,我发现这似乎是您需要的:编辑:我更改了代码以更改字符串的显示方式,这就是您问您所问内容的原因:)试试吧。它将字符串呈现为红色和虚线轮廓importjava.awt.BasicStroke;importjava.awt.Color;importjava.awt.Component;importjava.awt.Dimension;import
如果您创建的JScrollPane的视口(viewport)大于JScrollPane的组件,它会在左上角显示该组件。有什么方法可以改变这种行为,使组件居中显示?下面的示例程序。澄清:我有一个组件,其(width,height)=(cw,ch)。我有一个JScrollPane,其视口(viewport)具有(width,height)=(vw,vh)。组件可能会变大或变小。我想要一种使用滚动条相对于视口(viewport)中心点定位组件中心点的方法,因此如果一个或两个组件的尺寸小于视口(viewport),则该组件显示在视口(viewport)的中心。默认的滚动Pane行为将组件的左上
我有一个存储对象列表的swing应用程序。当用户点击按钮时,我想对列表中的每个对象执行两个操作,然后在完成后,将结果绘制在JPanel中。我一直在尝试使用SwingWorker、Callable和Runnable来进行处理,但无论我做什么,在处理列表时(这可能需要几分钟,因为它是IO绑定(bind)的),GUI被锁定。我有一种感觉,这可能是我调用线程或其他东西的方式,或者可能与绘图功能有关?这不是线程,因为它非常快。我也必须按顺序执行两个处理阶段,那么确保第二个处理阶段等待第一个处理阶段的最佳方法是什么?我使用了join(),然后是while(x.isAlive()){Thread.s
我正在尝试使用Swing小部件将两个按钮放入面板中。在NetBeansIDE中,我的JSeparatorborder属性在属性Pane中设置为(Noborder)。然而,一行出现了。这不是我对分隔符对象的期望。难道我做错了什么?来自Delphi和C#WinForms的背景,我希望在Swing中发现一些奇怪的地方。但是,如何在面板中的两个按钮之间制作特定大小的透明间隙呢?我是否必须使用布局并避免使用JSeparator?更新:在没有任何分隔符对象的情况下使用布局执行此操作应该是微不足道的。那么你是怎么做到的呢?我正在查看NetBeans布局定制器和属性检查器,但发现没有办法做到这一点。(
我有这个Swing秒表的工作代码。我想让标签TimeRemaining300seconds居中在第二行`。这是我的代码。importjava.awt.BorderLayout;importjava.awt.GridLayout;importjava.awt.Toolkit;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.sw