Java 有没有办法使用swing将背景色设置为用户定义的图像?
所以 我有一个组件,它监听用户输入,并从用户上次单击的位置到下一次单击的位置绘制图像 这很简单 问题是,我需要在演示文稿上显示它,我只想更改此用户定义图像的背景,以避免给人留下这样的印象,即我只是因为懒惰而保留了默认颜色 我已经定义了一个浅灰色/默认的配色方案,这在一定程度上解决了这个问题(我正在展示的应用程序比这个复杂,但这是我唯一的问题),但我希望在背景色方面有更多的自由 此类负责存储用户输入Java 有没有办法使用swing将背景色设置为用户定义的图像?,java,swing,Java,Swing,所以 我有一个组件,它监听用户输入,并从用户上次单击的位置到下一次单击的位置绘制图像 这很简单 问题是,我需要在演示文稿上显示它,我只想更改此用户定义图像的背景,以避免给人留下这样的印象,即我只是因为懒惰而保留了默认颜色 我已经定义了一个浅灰色/默认的配色方案,这在一定程度上解决了这个问题(我正在展示的应用程序比这个复杂,但这是我唯一的问题),但我希望在背景色方面有更多的自由 此类负责存储用户输入 package stackoverflow; import java.awt.Color; im
package stackoverflow;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JComponent;
/**
* Component that takes user input
*/
public class UserDefinedImage extends JComponent {
/**
*
*/
private static final long serialVersionUID = 1L;
private Image image;
private Graphics2D g2;
private static Integer oldX, oldY,tempX,tempY;
public UserDefinedImage() {
setDoubleBuffered(false);
addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
if (g2 != null) {
g2.setPaint(Color.black);
// draw line if g2 context not null
if(oldX==null){
oldX=e.getX();
}
if(oldY==null){
oldY=e.getY();
}
else{
tempX=e.getX();
tempY=e.getY();
g2.drawLine(oldX, oldY, tempX, tempY);
oldX=tempX;
oldY=tempY;
}
}
// refresh draw area to repaint
repaint();
}
});
}
protected void paintComponent(Graphics g) {
if (image == null) {
// image to draw null ==> we create
image = createImage(getSize().width, getSize().height);
g2 = (Graphics2D) image.getGraphics();
// enable antialiasing
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
}
g.drawImage(image, 0, 0, null);
}
}
这是我的主窗口,其中包含一个UserDefinedImage面板
package stackoverflow;
import java.awt.EventQueue;
import javax.swing.JFrame;
import java.awt.Color;
public class Main {
private JFrame frame;
private UserDefinedImage drawing;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Main window = new Main();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public Main() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.getContentPane().setBackground(new Color(222, 184, 135));
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
drawing= new UserDefinedImage();
drawing.setBounds(0, 0, 428, 244);
//not working
drawing.setBackground(new Color(250, 235, 215));
frame.getContentPane().add(drawing);
}
}
TLDR:我有一个接受用户输入的组件,Swing不能像其他组件一样为它提供背景。
我明白了为什么swing不能在不覆盖用户输入的情况下为它提供背景
我在初始化UserDefinedImage时将背景设置为颜色,然后让用户定义它想要绘制的线条,并在最初加载的背景上绘制 如果需要查看图像后面的背景颜色,请将其设置为透明图像 例如,代替:
image = createImage(getSize().width, getSize().height);
拥有:
我知道留下一些测试代码来显示我一直在做的测试。由于这个问题取决于用户输入,我选择添加一个TLDR来向没有时间浏览整个代码的人解释这个问题。“我明白为什么swing不能在不覆盖用户输入的情况下为它提供背景。”嗯。。好吗?我真的不明白你在说什么。顺便说一句,这不是你问题中唯一让我困惑的部分。你谈论背景图像和颜色时,就好像它们是一样的。如果它们不是,你的意思是什么?我想设置背景色。因此标题“使用swing将背景色设置为用户定义的图像的任何方法?”应为“使用swing将背景色设置为用户定义的颜色的任何方法?”?请输入标题和问题,以反映问题与图像无关。就是这样。对不起,如果我之前说得不太清楚的话
image = new BufferedImage(w,h,BufferedImage.TYPE_INT_ARGB));