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 に答える