以下屏幕截图显示了TextBubbleBorder1的测试.我想让矩形之外的组件的角完全透明并显示它下面的任何组件.我找到了一种方法,通过Clip在Graphics2D实例上设置(表示圆角以外的区域)并调用,将标签的BG颜色限制为"在边框内" clearRect().这可以在Label 1.

但是,当父面板上有红色BG(或任何非标准颜色)时,您可以看到此方法的缺点.角落默认为默认面板颜色(最容易看到Panel 2).
最终,我希望这能够在父容器中使用非标准颜色,但部分灵感来自于我需要做什么才能使用渐变颜料复制此组件?
有人知道让这些角落透明的方法吗?
import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;
import javax.swing.border.*;
public class BorderTest {
public static void main(String[] args) {
Runnable r = new Runnable() {
@Override
public void run() {
JPanel gui = new JPanel(new GridLayout(1,0,5,5));
gui.setBorder(new EmptyBorder(10,10,10,10));
gui.setBackground(Color.RED);
AbstractBorder brdr = new TextBubbleBorder(Color.BLACK,2,16,0);
JLabel l1 = new JLabel("Label 1");
l1.setBorder(brdr);
gui.add(l1);
JLabel l2 = new JLabel("Label 2");
l2.setBorder(brdr);
l2.setBackground(Color.YELLOW);
l2.setOpaque(true); …Run Code Online (Sandbox Code Playgroud) 我正在使用基于此答案中的代码的自定义类来绘制形状像讲话泡泡的背景.每当我调整应用程序窗口的大小足以使组件在顶部或底部突出时,所述组件的轮廓被绘制在JScrollPane其他组件的顶部之外; 在这种情况下JPanel.
在左侧图像中,JScrollPane由于组件仍然可见,因此绘制了底部组件的边界; 而在右侧图像中,所提到的组件不再可见,一切看起来都是预期的.
我相信这与我使用a JScrollPane来包含组件并因此允许组件在组件下滑动这一事实有关JPanel.我该如何防止这种情况?
主要:
public class Main {
public static void main(String[] args) {
JPanel panel = new JPanel(), panelbar = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
panelbar.setLayout(new FlowLayout());
JScrollPane scroll = new JScrollPane(panel,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
JFrame frame = new JFrame("");
frame.setLayout(new BorderLayout());
frame.setSize(200, 223);
for (int i = 0; i < 6; i++) {
JLabel label = new JLabel("JLabel");
label.setBorder(new CustomBorder());
label.setOpaque(true);
label.setBackground(Color.ORANGE);
panel.add(label);
}
panelbar.add(new …Run Code Online (Sandbox Code Playgroud)