0

几乎,一旦我使我的 JTextArea 和我的 JTextField 透明,当我键入时,它看起来好像我的所有组件都被复制并添加到屏幕上。我做错了什么,还是这是一个 NetBeans 错误?

package game;

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

/**
*
* @author xDaegothx
*/

public class Game extends JFrame
{
    JLayeredPane LP;
    Game_Chat GC;

    public Game()
    {
        LP = new JLayeredPane();
        LP.setBackground(Color.black);
        LP.setOpaque(true);

        GC = new Game_Chat();
        GC.setBounds(0,350,400,250);

        LP.add(GC);

        this.getContentPane().add(LP);
        this.setBounds(0,0,1200,700);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
    }

    public static void main(String[] args) 
    {
        new Game();
    }

public class Game_Chat extends JLabel
{
    JTextArea TA;
    JScrollPane JSP;
    JTextField TF;
    JButton Submit_btn;

    public Game_Chat()
    {
        TA = new JTextArea();
        TA.setForeground(new Color(255,255,255,0));
        TA.setBackground(new Color(255,255,255,0));
        TA.setOpaque(true);
        TA.setText("Welcome to 'Game'!");

        JSP = new JScrollPane(TA);
        JSP.setOpaque(true);
        JSP.setForeground(new Color(255,255,255,0));
        JSP.setBackground(new Color(255,255,255,0));
        JSP.setBounds(0,0,400,225);

        TF = new JTextField();
        TF.setOpaque(true);
        //TF.setBackground(new Color(255,255,255,0));
        TF.setBounds(0,225,350,25);

        Submit_btn = new JButton("Send");
        Submit_btn.setBorder(null);
        Submit_btn.setBounds(350,225,50,25);

        TF.addActionListener(new ActionListener() 
        {
            @Override
            public void actionPerformed(ActionEvent ae) 
            {
                Submit();
            }
        });

        Submit_btn.addMouseListener(new MouseAdapter()
        {
            @Override
            public void mouseClicked(MouseEvent me)
            {
                Submit();
            }
        });

        add(JSP);
        add(TF);
        add(Submit_btn);

        setBackground(Color.gray);
        setOpaque(true);
    }

    public void Submit()
    {
        String charname = "MyName";
        TA.append("\n"+charname+": "+TF.getText());
    }
}

}

4

1 回答 1

0

将前景和背景都设置为透明有什么意义?如果文本是透明的,您将永远看不到文本!

无论如何,要使组件完全透明,您不要使用背景。相反,您只需使用:

textArea.setOpaque(false);

如果你想要部分透明的背景,那么你可以使用 setBackground() 方法。但是你会遇到绘画问题。有关问题的解释和一些潜在的解决方案,请参阅具有透明度的背景。

此外,您不应该使用 setBounds() 来设置组件的大小/位置。Swing 旨在与布局管理器一起使用。所以花时间学习如何使用它们来更好地运行程序。

于 2013-08-28T03:14:11.400 回答