Tag:

覆盖JButton paintComponent()不起作用

我想绘制自己的JButton版本,所以我重写了paintComponent()方法,并画了一个渐变roundRect。 这可行,但在那之后,我想在它上面绘制Button的String,并且在编译时,我没有收到任何错误消息。 但是在运行时,我只看到了roundRect,gradient,就像我想要的那样(我也可以点击它),但是String是不可见的…… 这是我的代码: import javax.swing.*; import javax.swing.border.*; import java.awt.*; import java.awt.event.*; public class JIconButton extends JButton implements MouseListener { private boolean mouseInside; public JIconButton(String file, String text) { super(text, new ImageIcon(file)); setBorder(new LineBorder(Color.LIGHT_GRAY, 0, true)); setContentAreaFilled(false); setFocusPainted(false); addMouseListener(this); setVisible(true); } public void mouseClicked(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void […]

使用Android Paint类中的PorterDuffXfermode更改位图的亮度/变暗强度

好的,我的原始问题已经改变了。 我如何改变这样的事情的强度? DayToNight.setXfermode(new PorterDuffXfermode(Mode.DST_IN)); 在我梦想的世界里它会像这样工作 DayToNight.setXfermode(new PorterDuffXfermode(Mode.DST_IN(10))); 10是一个强度水平。 一个例子是,如果我有一个闪烁的蜡烛,当蜡烛燃烧明亮时,我想要我绘制到屏幕上的位图以保持其原始颜色和亮度,当它闪烁时,我希望位图几乎变黑,我想要当灯光变暗时,使位图变暗。 我有方程式,计时器和所有这些,但不是如何实际应用它来改变颜色/亮度。 也许燃烧图像是我正在寻找的? 我只是想改变轻盈哈哈。 我觉得使用paint.setShader可能是一个解决方案,但这方面的信息非常有限,我能够找到。 任何帮助,将不胜感激。 编辑:要清楚,我正在寻找一种方法来缩小/缩小位图,因为我将它们绘制到canvas上

如何inheritance系统的反别名设置,以便将文本绘制为像swing一样的屏幕外图像?

当我在Java 6下运行swing GUI应用程序时,它们会自动使用我为所有字体配置的子像素抗锯齿设置。 与标准AA选项相比,结果有了很大改进。 但是当我绘制到图像时,我无法初始化图形上下文以使用系统的AA配置。 尝试使用Java的不同AA提示是一个失败的原因,因为没有子像素方法将适用于所有用户。 有没有办法inheritance给定图形上下文的系统AA设置,而不必选择一个并明确设置提示? 目前我必须使用GASP AA来避免标准AA用小字体给出的可怕结果。 我试过没有为文本AA设置任何内容,也没有设置任何AA提示。 更新2010-01-05 我想我已经把它钉死了; 当直接绘制到AWT图形上下文时,子像素AA提示似乎只被尊重; 当我画到双缓冲图像时,它只是标准AA; 但是当我绕过双缓冲图像时,完成了子像素AA。 否则,The_Fire的答案将适用于具有Swing可用的JVM(但不适用于J2ME JVM); 请注意,The_Fire的答案不能使用AWT组件(使用新的Label()而不是新的JLabel()失败),可能是因为在将组件实现到显示器之前无法提取FontRenderContext。 我目前为目标图像获取图形上下文的代码如下所示: try { if((dbImage=dctRoot.createImage(wid,hgt,1))!=null) { // if createImage returns null or throws an exception the component is not yet displayable dbGraphics=(Graphics2D)dbImage.getGraphics(); if(dctRoot.properties.getBoolean(“Antialias”,true)) { try { // set AA on overall dbGraphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING ,RenderingHints.VALUE_ANTIALIAS_ON); // set text AA to […]

在Swing中使用Urdu字体输入文本时,不会显示英文字符

这与我之前的问题类似,但该解决方案在这里不起作用。 正如前一个问题中所提到的,我正在开发一个跨平台(Windows / Ubuntu)应用程序,该应用程序必须将英语音译为几种官方印度语言之一。 该应用程序具有自定义输入法,并且使用英语键入并按空格键会将键入的文本音译为特定的本地语言。 乌尔都语从右到左与其他人不同,如阿拉伯语/希伯来语。 我设法找到一个具有英语和乌尔都语字形的开放式许可乌尔都语字体 ,但是当我用英语输入字符时,什么都没有出现。 我不明白它是字体绘画问题,还是与输入法有关。 到目前为止,如果我禁用此语言的自定义输入法( InputMethod.dispatchEvent() ),我可以看到英文文本(但当然不会发生音译)。 我的发现: 将字体更改为Windows内置的阿拉伯字体之一 – 结果相同。 我没有使用ComponentOrientation来对齐文本字段中的文本,而是在语言环境为Urdu时使用了setHorizontalAlignment 。 结果相同。 在Windows上sun.awt.windows.WInputMethod JDK的默认输入法提供程序( sun.awt.windows.WInputMethod )。 在这里,我看到dispatchEvent()对OS进行本机调用以处理IME。 我不能在这做到这一点。 找到希伯来语的自定义IM – 我的dispatchEvent()版本基本相同。 在Eclipse中逐步执行JTextField代码 – 无法在AbstractDocument和子类中找到任何内容。 AbstractDocument.insertUpdate()方法检查并更新双向文本输入,但没有任何其他重要内容。 我无法理解dispatchEvent()调用后会发生什么。 正在注册字符,即音译引擎能够检测到键入的字符并处理它们,但它们不会显示在屏幕上。 解决方法 如果我让文本字段的方向与常规的从左到右语言一样,我可以看到英文文本。 但是,这对乌尔都语用户来说是不可接受的。 有人能指出我正确的方向吗?

在JPanel中绘制文本

我正在寻找如何在JPanel中绘制文本的最基本的描述。 我知道有十亿个教程,但没有一个与我点击,我有一些具体问题可以帮助其他困惑的人。 作为一个设置(测试应用程序),我有一个单独的类,它有一个JLabel,一个JTextField,一个JButton和一个JPanel。 应用程序从外部文件读取整数,并在按下JButton时在面板中显示它们的平均值。 我已经整理了所有底层编程(也就是说,按钮响应并将平均值打印到命令行)但我似乎无法理清如何将平均值打印到面板。 我想我最大的问题是如何将paint()或paintComponet()方法与其余代码结合在一起。 应该是它自己的class级吗? JPanel应该是它自己的类吗? 看起来这就是大多数教程告诉我的内容,我只是不确定第一步是什么。 代码如下: import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.*; public class Main extends JFrame implements ActionListener { private int[] intArray = new int[10000]; private int numOfInts = 0; private int avg = 0; protected JButton avgBtn; protected JTextField indexEntry; protected JLabel instructions; protected JPanel resultsPanel; public […]

在Java中为网格创建绘制矩形(用黑色填充)function

我在程序中创建了一个网格。 下面是用于创建网格的代码。 import java.awt.Graphics; import javax.swing.JComponent; import javax.swing.JFrame; class Grid extends JComponent { public void paint(Graphics g) { g.drawRect (10, 10, 800, 500); for (int i = 10; i <= 800; i+= 10) g.drawLine (i, 10, i, 510); for (int i = 10; i <= 500; i+= 10) g.drawLine (10, i, 810, i); } } […]

调用返回null的getGraphics()的任何替代方法

当我调用getGraphics()时,它经常返回null,即使我设置了xxx.getGraphics(); xxx可见(Google搜索显示…) 但这不起作用,这使我感到沮丧,因为在C-Sharp中这很简单易行。 有没有人知道更好的方法,而不是使用getGraphics()?