我正在制作一个 Swing 应用程序,它使用具有圆角的自定义 JPanel。这个 JPanel 使用 Flatlaf 库来圆角。喜欢:
putClientProperty( FlatClientProperties.STYLE, "arc: 90" );
问题是,我的主 JPanel 有一个图像,作为这个圆形 JPanel 的根,有一些问题。
如你所见,为了可视性,我的圆角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 帖子,但似乎问题与我的不完全相同。我不知道如何解决这个问题。
你可以试试这个:
panelLoginIn.setOpaque(false);