Java JLabel和JTextArea不工作

Java JLabel和JTextArea不工作,java,swing,jlabel,jtextarea,Java,Swing,Jlabel,Jtextarea,我正在制作一个窗口,它有一个大的文本区域和一个小的文本区域。这就是我到目前为止所做的: 这是我的代码: JPanel window=new JPanel(){ protected void paintComponent(Graphics g){ super.paintComponent(g); ImageIcon ii=new ImageIcon("textEffect.png"); Image i=ii.getImage();

我正在制作一个窗口,它有一个大的文本区域和一个小的文本区域。这就是我到目前为止所做的:

这是我的代码:

JPanel window=new JPanel(){
    protected void paintComponent(Graphics g){
        super.paintComponent(g);
        ImageIcon ii=new ImageIcon("textEffect.png");
        Image i=ii.getImage();
        g.drawImage(i,0,0,null,this);
    }
};
JLabel label=new JLabel("Say: ");
JTextArea dialog=new JTextArea(20,50);
JTextArea input=new JTextArea(1,46);
JScrollPane scroll=new JScrollPane(
    dialog,
    JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
    JScrollPane.HORIZONTAL_SCROLLBAR_NEVER
);

//main method
public static void main(String[] args){
    new Window();
}
//Makes window and starts bot
public Window(){
    super("Pollockoraptor");
    setSize(600,400);
    setResizable(false);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    dialog.setEditable(false);
    dialog.setOpaque(false);
    dialog.setBackground(new Color(0, 0, 0, 0));
    dialog.setLineWrap(true);
    input.addKeyListener(this);
    label.setVerticalTextPosition(SwingConstants.BOTTOM);
    label.setHorizontalTextPosition(SwingConstants.LEFT);
    window.add(scroll);
    window.add(label);
    window.add(input);
    window.setBackground(new Color(97,118,131));
    add(window);
    setVisible(true);
}'
如何使较大的文本区域部分透明,以便可以看到背景,以及如何移动,例如:位于较小文本区域的前面?

JPanel默认使用FlowLayout。你会想改变布局管理器,就个人而言,我会推荐GridBagLayout之类的东西,但那只是我自己

有关更多详细信息,请参阅

要使JTextArea透明,您必须使JScrollPane和JViewPort透明

Swing只知道如何绘制完全不透明或完全透明的组件。通过使组件透明并覆盖其paintComponent方法,并使用AlphaComposite或使用alpha值设置为255以下的颜色绘制,可以创建半透明效果

例如

和一般建议

过键侦听器 覆盖自定义组件的getPreferredSize,以便在布局时获得更好的结果 使用JFramepack over setSize,这将根据内容的需要计算窗口大小,并考虑窗框装饰 如何使较大的文本区域部分透明,以便可以看到背景


检查一下使用透明背景和通用解决方案时出现的问题,这样您就不必一直进行自定义绘制了。

如果没有看到您的第一张照片,我真的无能为力,但是一些不相关的建议:1不要用paintComponent方法读取图像,因为你不必要地重新读取图像并减慢了一个必须绝对快速的方法。另外,2从不向文本组件添加KeyListener,我不在乎Swing教程是否显示了这一点,这只是一件危险的事情,而且有更好的方法可以在文本组件中捕获输入。3您的布局管理器应该帮助您定位组件。Oh和4遵循MadProgrammer的建议,因为他知道前后摆动。JTextArea输入=新的JTextArea 1,46;可能应该是JTextField输入=新的JTextField 46;谢谢你,我使用了GridBagLayout,它将所有内容完美地对齐。我使JViewPort透明,并修复了我的背景问题。