У меня возникают проблемы с получением полупрозрачной рамки. Когда «alphaValue» - 255, все работает так, как ожидалось. Но мне нужна прозрачная рамка. Я создал небольшой тестовый класс ниже, который демонстрирует проблему. Как вы видите, прямоугольник «MIDDLE» появляется все время. Но прямоугольник «DRAW» появляется только тогда, когда «alphaValue» равен 255. Когда он равен < = 254, вы можете видеть по линиям печати, что метод все еще вызывается, но изображение не обновляется. Спасибо заранее за любую помощь.Java AWT Draw на прозрачной рамке
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);
}
}
Вы также смешивая тяжелый вес и легкий вес компонентов, может рассмотреть возможность использования панели JPanel. Это может не решить эту проблему, но это предотвратит другие возможные проблемы. – MadProgrammer
Не думаю, что у панели есть метод paintComponent. С альфа-значением 254 я бы подумал, что я все равно увижу рисованный прямоугольник вместо ничего. – Joe
Использование компонента тяжелой массы, например 'Panel', может быть« частью »проблемы. Я бы поставил под вопрос, почему вы используете компоненты AWT напрямую – MadProgrammer