2011-01-14 8 views
3

を示すゴーストテキストはので、ここで契約です:Javaのスイング:部分的に透明な背景を持つJTextAreaの上のテキストを更新

私はその1つの内部でのJPanelとJTextAreaのを持っています。 JPanelの背景色はアルファ値が200です。 JPanelを使用して背景画像を表示することができます。それは部分的な透明性と呼ばれていませんか?とにかく、私は完全に1つを通して見ることができるように、私は、JTextAreaの非不透明を設定しました:

JPanel p = new JPanel(); 
p.setBackground(new Color(237, 234, 215, 200); 
JTextArea jta = new JTextArea("Blahblahblahblah"); 
jta.setOpaque(false); 
p.add(jta); 

[OK]を、私はボタンを押したときに、テキストは次のように変更されます:

jta.setText("new BlahBlah..."); 

次に、それは起こります:最初のテキストはそこに新しい部分的に透明なフィルムが残ったままです。そして、私が追加したテキストは当然ですが、すぐ後ろにあるものは前のものを見ることができます。テキストを何倍か変更すると、ゴーストが消えます。

The screenshot as a link.

翻訳(スクリーンショットは、行の3つのショットあり):
左1:「質問#8のうち1:?(統治行為論を)(私のコメント:OK "
センター:"質問2:8のうち2つ:(別の質問、心配しないでください)?(私のコメント:幽霊はそこにあります[と矢印を指し示す]) "
右手側: "8番のうち8番:(別の質問)?(私のコメント:OK)"

このプログラムが8から3にスワップする質問の量を減らすと、最後の1つは通常よく見えますが、ゴーストは消えてしまいます。しかし、時にはそれは私が何をしても固執します。おそらくメモリが足りない(私はほとんどそれを飲みませんが)とは関係がありますか?

だから、私を助けてください!私は48時間後に締め切りを取っています。

PS。あなたが不思議のような場合、その言語はフィンランド語です。私は学校のプロジェクトに取り組んでいます。それは、さまざまなアプリケーションを持つことができる比較マシンになるでしょう。たとえば、あなたが公選が来たら、プレス/メディアはWeb上でこの種のマシンを使ってどのような問題についても候補者の意見を述べ、投票者も意見を入力することができ、どの候補者が投票者の思考に最も適しているかを計算する。私のホームページを見てください。あなたが興味を持っている場合のためのスクリーンショットのためのプロジェクトブログ(フィンランド語)。

an55i

答えて

2

Backgrounds With Transparencyを参照してください。

+0

よかったです。私はそれを試しましたが、すぐには役に立たなかった...コードの使い方がわからないからです...実際には、JPanel pのpaintComponentをオーバーライドするかどうかはわかりません()メソッドまたは背景JPanelのメソッド? – an55i

+0

"解決策は、コンポーネントの背景が塗られる前に、コンポーネントの祖先が塗られていることを確認することです。" – an55i

+0

@ an55iでは、AlphaContainerを使用できるので、何も上書きする必要はありません。それはあなたのための背景の絵をします。 – camickr

0

最後に、私はそれを正しく表示しました!

  1. コンテナ(この場合はp)と内部のコンポーネント(jta)の両方がsetOpaque(false)でなければなりません。
  2. コンテナは、内側のコンポーネントの背景色を取得することによって、常にそれ自身をクリアする必要があります。内部のコンポーネントの背景色は、実際には内側のコンポーネントの種類が祖先から得られる色です。コンテナ自体

私はどういうわけではないですか?まあ、少なくともコードはそれをトリックだ。

クラスのフィールド:

private JTextArea jta; 
private JPanel p; 

後で:

jta = new JTextArea("BlahBlahBLAH"); 
jta.setBackground(new Color(237, 234, 215, 200)); 
p = new JPanel() { 
    @Override 
    protected void paintComponent(Graphics g) { 
     if(getContentPane().isAncestorOf(jta)) { 
      g.setColor(jta.getBackground()); 
      g.fillRect(0, 0, getWidth(), getHeight()); 
     } 
    } 
}; 

p.setOpaque(false); 
jta.setOpaque(false); 
p.add(ta); 

そして、それはそれです。私は "p"に "jta"を追加する前に、いくつかの境界線とものを配置します。そして、何が最高だ、私は実際にを学んだこれについて何か。サポートありがとう!

関連する問題