相关疑难解决方法(0)

使用Graphics2D覆盖BufferedImage上的文本并返回BufferedImage

我已经检查了类似命名的问题,但他们没有回答这个用例.

基本上,我是在一个给定的坐标(x,y)上叠加一些文本(文本)我在包中有以下功能;

protected BufferedImage Process2(BufferedImage image){
    Graphics2D gO = image.createGraphics();
    gO.setColor(Color.red);
    gO.setFont(new Font( "SansSerif", Font.BOLD, 12 ));
    gO.drawString(this.text, this.x, this.y);
    System.err.println(this.text+this.x+this.y);
    return image;
}
Run Code Online (Sandbox Code Playgroud)

我觉得我错过了一些显而易见的东西; 我可以找到的每一个对Graphics2D的引用都是处理游戏或直接写入文件,但我只想要返回一个BufferedImage.覆盖'渲染'

在当前代码中,图像显示为未更改.

谢谢!

java bufferedimage graphics2d

41
推荐指数
1
解决办法
7万
查看次数

旋转BufferedImage时如何产生清晰的绘画效果?

一种尝试的方法是使用TexturePaintg.fillRect()绘制图像.然而,这需要您在每次绘制图像时创建一个新的TexturePaint和Rectangle2D对象,这是不理想的 - 并且无论如何都没有帮助.

当我使用时g.drawImage(BufferedImage,...),旋转的图像看起来模糊/柔和.

我熟悉RenderingHints和双缓冲(我认为这就是我正在做的事情),我发现很难相信你不能轻易有效地在Java中旋转产生尖锐结果的图像.

使用代码TexturePaint看起来像这样.

Grahics2D g2d = (Graphics2D)g; 
g2d.setPaint(new TexturePaint(bufferedImage, new Rectangle2D.Float(0,0,50,50)));
g2d.fillRect(0,0,50,50);
Run Code Online (Sandbox Code Playgroud)

我正在用AffineTransform一把牌旋转成一个风扇.什么是快速绘制好看图像的最佳方法?

这是一个截图:
模糊旋转的示例
9是清脆的,但其余的卡肯定不那么尖锐.

问题可能出在我创建每张卡片图像并将其存储在数组中时.
这就是我现在正在做的事情:

// i from 0 to 52, card codes.
...
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice gs = ge.getDefaultScreenDevice();
GraphicsConfiguration gc = gs.getDefaultConfiguration();
BufferedImage img = gc.createCompatibleImage(86, 126, Transparency.TRANSLUCENT);

    Graphics2D g = img.createGraphics();
    setRenderingHints(g);
    g.drawImage(shadow, 0, 0, 86, 126, null);
    g.drawImage(white, 3, 3, 80, 120, null);
    g.drawImage(suit, 3, 3, 80, …
Run Code Online (Sandbox Code Playgroud)

java interpolation bufferedimage transformation transform

25
推荐指数
2
解决办法
3066
查看次数

将透明JPanel放在另一个无法正常工作的JPanel上

我试图将JPanel放在另一个包含JTextArea和按钮的JPanel之上,我希望上层apnel是透明的.我通过制作上面板的setOpaque(false)来尝试它.但它不起作用.任何人都可以帮我解决这个问题吗?提前致谢!

public class JpanelTest extends JPanel
{
    public JpanelTest()
    {
    super();
    onInit();
}
private void onInit()
{
    setLayout(new BorderLayout());

    JPanel panel = new JPanel();
    panel.setLayout(new BorderLayout());
    panel.add(new JTextArea(100,100),BorderLayout.CENTER);
    panel.add(new JButton("submit"),BorderLayout.SOUTH);

    JPanel glass = new JPanel();
    glass.setOpaque(false);

    add(panel,BorderLayout.CENTER);
    add(glass,BorderLayout.CENTER);
    setVisible(true);
}

public static void main(String args[])
{
    new JpanelTest();
}
}
Run Code Online (Sandbox Code Playgroud)

java swing jpanel jlayer glasspane

11
推荐指数
2
解决办法
2万
查看次数

Java Tutorials半透明窗口示例给使用jdk7的人带来了麻烦吗?

这是一个例子.

如果你构建并运行TranslucentWindow支持jdk7的NetBeans IDE 7.0,你将得到以下异常:

Exception in thread "AWT-EventQueue-0" java.awt.IllegalComponentStateException: The frame is decorated
    at java.awt.Frame.setOpacity(Frame.java:960)
    at main.TranslucentWindow.<init>(TranslucentWindow.java:23)
    at main.TranslucentWindow$1.run(TranslucentWindow.java:47)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:705)
    at java.awt.EventQueue.access$000(EventQueue.java:101)
    at java.awt.EventQueue$3.run(EventQueue.java:666)
    at java.awt.EventQueue$3.run(EventQueue.java:664)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:675)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
BUILD SUCCESSFUL (total time: 1 second)
Run Code Online (Sandbox Code Playgroud)

根据这个堆栈跟踪,违规行是tw.setOpacity(0.55f).但是,正如错误所示,如果你setUndecorated(true)在框架上调用,那么它不会抛出异常并创建一个半透明的窗口,虽然没有任何装饰(这很痛苦).这是正常的吗?这段代码不应该"开箱即用"吗?我忽略了什么吗?

编辑

为什么他们的半透明窗口看起来是装饰的,还是这个自定义渲染?

这是什么...

在此输入图像描述

应该是什么......

在此输入图像描述

java swing translucency java-7 netbeans7.0

9
推荐指数
2
解决办法
2万
查看次数

Java透明度渲染错误

我目前正在开发一个自助服务终端风格的Java程序来显示天气,时间,预测等.这是一个程序应该是什么样子的镜头(在更新时间之前拍摄的截图)

图像显示图形错误之前所需的输出

各个部分创建为JPanels,并paintComponent()重写了方法.它们绘制渐变标题和半透明背景.但是,当我更改其中一个面板的内容时,之前的内容会被遗忘,而不是被删除.一个例子如下所示:

如你所见,当时间从11:51变为11:52时,数字重叠,背景变得更亮(因为半透明背景被重新绘制)

图形错误

显示图形错误的图像

我该怎么做才能防止这种重叠?最终,当单个面板更新其内容时,我宁愿不必重绘整个屏幕.我宁愿只重绘那个特定的部分.重新绘制背景,然后是其中的所有组件将很容易.

更新

几个答案涉及清除要绘制的区域.我是否使用g.clear()AlphaComposite.CLEAR删除背景图像.这可以在下图中看到.也许如果我可以在清除区域之前复制背景,我可以重新绘制背景的那一部分,然后适当地分层其他图像.思考?

在此输入图像描述

更新2

提交了一个答案,其中显示了在透明面板和背景上放置的计时器的完整工作示例.这非常有用,但是,我不是手动绘制我的子组件.时间,天气图标和温度都是JLabel布局在半透明面板上.我宁愿不必手动绘制单个组件.

java swing transparency repaint paintcomponent

8
推荐指数
1
解决办法
3305
查看次数

透明的JFrame背景

是否可以制作具有透明背景并在其上绘制图像的JFrame,因此只有图像可见而没有边框或背景?

java transparency background-image jframe

7
推荐指数
2
解决办法
3万
查看次数

在Java Swing中更改面板标题的颜色

我正在使用144 dpi平板显示器在Win7上运行Swing应用程序.我的框架,选项窗格等的标题都在透明背景上显示为白色(Aero?).我一般都喜欢Aero,但白色标题很难读!我已经浏览了所有我能想到的UIManager属性,但它们似乎都没有任何效果.我可以在UIManager下面找到一个级别 - 并且最好为我的应用程序进行一次更改,因为我不想为每个选项窗格调用添加代码.也许我错过了一些非常基本的东西......但是我将不胜感激!

我也想更改标题字体,但这并不紧急!

另外,BTW,你在设置外观之前或之后放置了UIManager.put调用吗?或者不重要吗?


更多信息:我改变了我的Win7个性化,使用了一个名为Canada的Aero主题,标题现在是黑色的,使用了合理的字体.所以我的问题变成:

UIManager属性如何与Win7主题相关,并且由于我无法预测用户将使用哪些主题,如何控制窗格标题外观?


我将以另一种方式提出这个问题:为什么我不能改变应用程序显示面板中每个像素的颜色?是否有一个低于 UIManager 的级别,这似乎在你允许修改的内容中非常有限......?

java swing uimanager windows-7

6
推荐指数
2
解决办法
1531
查看次数

使JFrame透明在Mac上滚动

我有一个透明的未装饰JFrame,我设置使用AWTUtilities.setWindowOpaque(this, false).在JFrame,我有一个滚动窗格; 它在Windows上完美运行.在Mac上,整体JFrame是可拖的; 所以当我尝试通过在滚动条上单击并按住鼠标滚动滚动窗格时,整个框架移动而不是滚动条拇指.我也尝试使用setBackground(new Color(0,0,0,0))而不是setWindowOpaque(),但它有同样的问题.有想法该怎么解决这个吗?

java macos swing scroll transparent

6
推荐指数
1
解决办法
455
查看次数

Swing:将鼠标悬停在半透明JPanel上的单选按钮标签上

在我的问题中,我有一个不透明的JPanel和另一个半透明(半透明)的JPanel,它位于第一个JPanel上.当我在顶部JPanel上添加单选按钮时.问题是每当我在每个单选按钮的标签区域上输入鼠标时(每次我将鼠标从标签上移开),它会变得越来越暗.

package trial;

import java.awt.Color;
import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;

public class Test {

public static void main(String arg[]){
    JFrame rootframe = new JFrame("Test panel");
    rootframe.setSize(800, 550);
    rootframe.setExtendedState(JFrame.MAXIMIZED_BOTH);

    JPanel basePanel = new JPanel(); //fills rootFrame
    basePanel.setOpaque(true);
    basePanel.setBackground(Color.yellow );     

    JPanel panelContainingRadioButtons = new JPanel();//wraps radio buttons
    panelContainingRadioButtons.setOpaque(true);
    panelContainingRadioButtons.setBackground(new Color(0,0,0,100) );

    ButtonGroup buttonGroup1 = new ButtonGroup();

    JRadioButton jRadioButton1 = new JRadioButton();
    jRadioButton1.setText("Text A...............................");
    jRadioButton1.setOpaque(false);
    jRadioButton1.setForeground( Color.white);
    buttonGroup1.add(jRadioButton1);

    JRadioButton jRadioButton2 = new JRadioButton();
    jRadioButton2.setOpaque(false);
    jRadioButton2.setForeground( Color.white);
    buttonGroup1.add(jRadioButton2);
    jRadioButton2.setText("Text B.......................");

    JRadioButton …
Run Code Online (Sandbox Code Playgroud)

java swing jpanel jradiobutton translucency

6
推荐指数
1
解决办法
1755
查看次数

如何让这个JButton可见?当我有渐进式扫描背景JWindow()?

如何让JButton可见?

1)当没有打开渐进背景时:JButton正在显示

在此输入图像描述

2)当没有打开渐进背景时,按下JButton仍然没有显示闪烁:

在此输入图像描述

3)当打开渐进背景时,JButton是不可见的,按此时我看到闪烁,JButton()出现并再次隐藏自动.<<问题在这里,我该如何解决?

在此输入图像描述

import java.awt.Color;
import java.awt.AlphaComposite;
import java.awt.BorderLayout;
import java.awt.Graphics;
import javax.swing.*;

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

public class ButtonTest extends JWindow implements MouseListener, MouseMotionListener {

    private static final long serialVersionUID = 1L;
    private JFrame frame = new JFrame();
    private SoftJButton softButton1;

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                ButtonTest j = new ButtonTest();
                j.createAndShowGUI();
            }
        });
    }

    public void createAndShowGUI() {
        softButton1 = new SoftJButton("Transparent Button");
        softButton1.setBackground(Color.GREEN);
        softButton1.setAlpha(0.5f);
        softButton1.setDoubleBuffered(true); …
Run Code Online (Sandbox Code Playgroud)

java linux user-interface swing awt

5
推荐指数
1
解决办法
3195
查看次数