Я заканчиваю домашнее задание, но у меня возникают проблемы при использовании свинга.Я использую drawRect для последовательных пикселей, я надеюсь, что смогу создать эффект управляющей тени, но между нарисованными прямоугольниками есть промежуток, хотя они и пиксели непрерывны, и я хочу знать, как его исправить.
import javax.swing.*;
import javax.swing.border.Border;
import java.awt.*;
class DropShadowPanel extends JPanel {
private static final long serialVersionUID = 1L;
public int pixels;
public DropShadowPanel(int pix) {
setOpaque(false);
this.pixels = pix;
Border border = BorderFactory.createEmptyBorder(pixels, pixels, pixels, pixels);
this.setBorder(BorderFactory.createCompoundBorder(this.getBorder(), border));
this.setLayout(new BorderLayout());
}
@Override
protected void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D)g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
int shade = 0;
int topOpacity = 60;
for (int i = 0; i <= pixels; i++) {
g2d.setColor(Color.black);
g2d.drawRect(i, i, this.getWidth() - ((i * 2)), this.getHeight() - ((i * 2))); // Originally i*2+1,but i fix it the problem also appears.
}
}
@Override
public Dimension getPreferredSize() {
return new Dimension(200, 200);
}
}
public class Main {
public static void main(String[] args) {
JFrame jFrame = new JFrame("Test");
JPanel panel = new JPanel();
panel.add(new DropShadowPanel(20));
jFrame.add(panel);
jFrame.pack();
jFrame.setVisible(true);
}
}
Теперь я обновил полный код.Чтобы прояснить проблему, я изменил цвет в коде на черный.
Это проблемные изображения: