Java AWT在半透明框架上绘制
我在半透明的画框上画画有困难。当“alphaValue”为255时,一切正常。但我需要一个半透明的框架。我在下面创建了一个小测试类来演示这个问题。如您所见,“中间”矩形始终出现。但“绘制”矩形仅在“alphaValue”为255时出现。当AWT组件本身没有透明度概念时,它们总是不透明的 您已经使用了Java AWT在半透明框架上绘制,java,awt,Java,Awt,我在半透明的画框上画画有困难。当“alphaValue”为255时,一切正常。但我需要一个半透明的框架。我在下面创建了一个小测试类来演示这个问题。如您所见,“中间”矩形始终出现。但“绘制”矩形仅在“alphaValue”为255时出现。当AWT组件本身没有透明度概念时,它们总是不透明的 您已经使用了JPanel,您可以使用setOpaque来控制不透明度(打开或关闭)。这将允许面板成为透明的,然后您应该能够看到直接应用到帧的alpha效果。。。 您还可以混合重物和轻量级组件,可以考虑使用JP
JPanel
,您可以使用setOpaque
来控制不透明度(打开或关闭)。这将允许面板成为透明的,然后您应该能够看到直接应用到帧的alpha效果。。。
您还可以混合重物和轻量级组件,可以考虑使用JPanel在面板上。它可能无法解决此问题,但可以防止其他可能的问题。我不认为面板有paintComponent方法。如果alpha值为254,我认为我仍然会看到一个绘制的矩形,而不是什么都没有。使用像
Panel
这样的重量级组件可能是问题的“一部分”。我想问你为什么使用AWT组件直接对我来说效果很好(alpha设置为128),当我拖动鼠标左右时,我可以看到PAINT
和DRAW
,只需切换到JFrame和JPanel即可。我实现了这个组件。如何使矩形不透明(alpha 255)。如果帧是setOpacity(.1)。先生,您是一个向导,我希望我能给您多投一票。
import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Panel;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class TransparencyTest {
private static Point startPoint = new Point();
private static Point endPoint = new Point();
public static void main(String[] args) {
new TransparencyTest().test();
}
@SuppressWarnings("serial")
private void test() {
int alphaValue = 255;
Frame myFrame = new Frame();
myFrame.setUndecorated(true);
myFrame.setBackground(new Color(0, 0, 0, alphaValue));
myFrame.setSize(800, 800);
Panel myPanel = new Panel() {
public void paint(Graphics g) {
super.paint(g);
System.out.println("PAINT");
g.setColor(new Color(255, 0, 0, 255));
if(startPoint.equals(new Point())) {
System.out.println("MIDDLE");
g.drawRect(200, 200, 400, 400);
}
else {
System.out.println("DRAW");
g.drawRect(
(int)Math.min(startPoint.getX(), endPoint.getX()),
(int)Math.min(startPoint.getY(), endPoint.getY()),
(int)Math.abs(startPoint.getX() - endPoint.getX()),
(int)Math.abs(startPoint.getY() - endPoint.getY())
);
}
}
};
myFrame.add(myPanel);
MouseAdapter myMouseAdapter = new MouseAdapter() {
public void mousePressed(MouseEvent e) {
startPoint = e.getPoint();
}
public void mouseDragged(MouseEvent e) {
endPoint = e.getPoint();
myPanel.repaint();
}
};
myPanel.addMouseListener(myMouseAdapter);
myPanel.addMouseMotionListener(myMouseAdapter);
myFrame.setVisible(true);
}
}
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class TransparencyTest {
private static Point startPoint = new Point();
private static Point endPoint = new Point();
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
new TransparencyTest().test();
}
});
}
@SuppressWarnings("serial")
private void test() {
int alphaValue = 128;
JFrame myFrame = new JFrame();
myFrame.setUndecorated(true);
myFrame.setBackground(new Color(0, 0, 0, alphaValue));
// myFrame.setOpacity(0.1f);
myFrame.setSize(800, 800);
myFrame.setLocation(100, 100);
JPanel myPanel = new JPanel() {
public void paintComponent(Graphics g) {
super.paintComponent(g);
System.out.println("PAINT");
g.setColor(new Color(255, 0, 0, 255));
if (startPoint.equals(new Point())) {
System.out.println("MIDDLE");
g.drawRect(200, 200, 400, 400);
} else {
System.out.println("DRAW");
g.drawRect(
(int) Math.min(startPoint.getX(), endPoint.getX()),
(int) Math.min(startPoint.getY(), endPoint.getY()),
(int) Math.abs(startPoint.getX() - endPoint.getX()),
(int) Math.abs(startPoint.getY() - endPoint.getY())
);
}
}
};
myPanel.setOpaque(false);
myFrame.add(myPanel);
MouseAdapter myMouseAdapter = new MouseAdapter() {
public void mousePressed(MouseEvent e) {
startPoint = e.getPoint();
}
public void mouseDragged(MouseEvent e) {
endPoint = e.getPoint();
myPanel.repaint();
}
};
myPanel.addMouseListener(myMouseAdapter);
myPanel.addMouseMotionListener(myMouseAdapter);
myFrame.setVisible(true);
}
}