带有 Flatlaf 自定义角剪裁的 Swing Java 面板

问题描述 投票:0回答:1

我正在制作一个 Swing 应用程序,它使用具有圆角的自定义 JPanel。这个 JPanel 使用 Flatlaf 库来圆角。喜欢:

putClientProperty( FlatClientProperties.STYLE, "arc: 90" );

问题是,我的主 JPanel 有一个图像,作为这个圆形 JPanel 的根,有一些问题。

Problem

如你所见,为了可视性,我的圆角JPanel是红色的,有圆角。然而,我可以看到旧的角进来,显示黑色的方角。

这是我的背景面板代码:

public class JPanelBackground extends JPanel {

    private BufferedImage backgroundImage;

    public JPanelBackground(String imagePath) throws IOException {


        backgroundImage = ImageIO.read(new File(imagePath));

    }
    
    @Override
    protected void paintComponent(Graphics g) {

        super.paintComponent(g);
        int panelWidth = getWidth();
        int panelHeight = getHeight();

        // Obtener el ancho y alto de la imagen de fondo
        int imageWidth = backgroundImage.getWidth();
        int imageHeight = backgroundImage.getHeight();

        // Calcular la relación de aspecto de la imagen
        double aspectRatio = (double) imageWidth / imageHeight;

        // Calcular el ancho y alto de la imagen para que se ajuste al panel manteniendo la relación de aspecto
        int scaledWidth = panelWidth;
        int scaledHeight = (int) (panelWidth / aspectRatio);

        // Si la altura escalada es menor que la altura del panel, recalcula el ancho y alto para ajustar a la altura del panel
        if (scaledHeight < panelHeight) {
            scaledHeight = panelHeight;
            scaledWidth = (int) (panelHeight * aspectRatio);
        }

        // Calcular las coordenadas de dibujo para centrar la imagen
        int x = (panelWidth - scaledWidth) / 2;
        int y = (panelHeight - scaledHeight) / 2;

        // Dibujar la imagen de fondo escalada y centrada en el panel
        g.drawImage(backgroundImage, x, y, scaledWidth, scaledHeight, this);

    }

}

这是我的 GUI 代码,其中包含来自 Intellij Idea GUI Designer 的 createUIComponents。

 private void createUIComponents() {

        try{

            panelLogin = new JPanelBackground("src/main/resources/photos/fondoLogin.png");      //BackgroundIMG Panel

            panelLoginIn = new JPanelRounded(); // Rounded JPanel
            
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

我尝试查看其他一些 stackoverflow 帖子,但似乎问题与我的不完全相同。我不知道如何解决这个问题。

java swing flatlaf
1个回答
0
投票

你可以试试这个:

panelLoginIn.setOpaque(false);

© www.soinside.com 2019 - 2024. All rights reserved.