Java 将JPanel添加到JLayer中的问题

Java 将JPanel添加到JLayer中的问题,java,swing,jpanel,jtextarea,jlayer,Java,Swing,Jpanel,Jtextarea,Jlayer,我目前正在开发一个JavaSwing应用程序。我想用JLayer装饰JPanel,但是卡住了 现在我要将JTextArea添加到JPanel中,然后将JPanel添加到JLayer中,最后添加到JScrollPane中。必须使用JPanel,因为我想在JTextArea旁边添加额外的组件(将JTextArea添加到BorderLayout.CENTER和自定义组件BorderLayout.LINE\u START)。问题在于JPanel不会自动展开,而是缩小到(0,0)大小 我已经想到了一些变通

我目前正在开发一个JavaSwing应用程序。我想用
JLayer
装饰
JPanel
,但是卡住了

现在我要将
JTextArea
添加到
JPanel
中,然后将
JPanel
添加到
JLayer
中,最后添加到
JScrollPane
中。必须使用
JPanel
,因为我想在
JTextArea
旁边添加额外的组件(将
JTextArea
添加到
BorderLayout.CENTER
和自定义组件
BorderLayout.LINE\u START
)。问题在于
JPanel
不会自动展开,而是缩小到(0,0)大小

我已经想到了一些变通办法,但它们不太合适

(1) 将
JScrollPane
添加到
JLayer
中,并将
JLayer
直接添加到顶级容器中。但是
JLayer
还包括
JScrollPane
,而我只希望它包括
JTextArea

(2) 避免使用
JPanel
,并寻找其他方法在
JTextArea
旁边添加自定义组件,但我想不出任何简单的方法来实现它

代码如下:

import java.awt.*;
import javax.swing.*;
import javax.swing.plaf.*;

public class Test
{
    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            @Override
            public void run()
            {
                JFrame frame = new JFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                //add JLayer
                JTextArea textArea = new JTextArea("JTextArea blah blah blah");
                JPanel panel = new JPanel(new BorderLayout());
                panel.setBackground(Color.RED);
                panel.add(textArea, BorderLayout.CENTER);
                JLayer<JPanel> layer = new JLayer<JPanel>(panel, new LayerUI<JPanel>());
                frame.add(new JScrollPane(layer), BorderLayout.CENTER);
                //setup frame and show
                frame.setSize(250,250);
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }
}
滚动时(
JScrollPane
JLayer
覆盖):


那么,如何获得正确的结果呢?感谢您提前提供解决方案。

那么您的问题是
JPanel
没有扩展?你试过使用不同的布局吗?我不能在jlayer上调用setLayout(new BorderLayout()),你可以将层中的绘画剪裁到不包含滚动条的区域,我知道,但我更愿意找出我的代码不能按预期工作的原因。此外,这不是一个非常优雅的方法。=)
import java.awt.*;
import javax.swing.*;
import javax.swing.plaf.*;

public class Test
{
    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            @Override
            public void run()
            {
                JFrame frame = new JFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                //add JLayer
                JTextArea textArea = new JTextArea("JTextArea blah blah blah");
                JPanel panel = new JPanel(new BorderLayout());
                panel.setBackground(Color.RED);
                panel.add(textArea, BorderLayout.CENTER);
                JLayer<JScrollPane> layer = new JLayer<JScrollPane>(new JScrollPane(panel), new LayerUI<JScrollPane>());
                frame.add(layer, BorderLayout.CENTER);
                //setup frame and show
                frame.setSize(250,250);
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }
}
new LayerUI<JScrollPane>()
{
      @Override
      public void paint(Graphics g, JComponent c)
      {
            super.paint(g,c);
            g.setColor(new Color(255,0,0,50));
            g.fillRect(0,0,c.getWidth(),c.getHeight());
      }
}