2012-04-21 15 views
0

JFrameの一部ですべてのペイントとリフレッシュを完全に無効にしようとしています。私は単純にそうようなpublic void paint(Graphics)をオーバーライドすることで全体のJFrameに所望の効果を得ました:JPanelでペイントを無効にする

import javax.swing.*; 

class Test extends JFrame { 

    Test() { 
    setBounds(20,20, 100,100); 
    setVisible(true); 
    } 

    //This disables all painting and refreshing ON A JFRAME. 
    //Just doing this on a JPanel doesn't work. 
    public void paint (Graphics g) {} 

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

    } 

私はこれと同じ効果をしたいが、唯一のJFrameの特定の領域に。私はフレームの残りの部分に通常のようなGUIコンポーネントを追加できるようにしたい。私はダブルバッファリング(JPanelののコンストラクタを使用して)、次のメソッドをオーバーライドを無効にすることを試みたので、同様に(JPanelのとJComponentの両方を拡張する):

public class DontRefresh extends JComponent/JPanel { 
    public void paint (Graphics g) {} 
    public void paintComponent (Graphics g) {} 
    public void repaint() {} 
    public void update (Graphics g) {} 
    public void updateUI() {} 
    } 

とiも経由してリフレッシュを無効にすることを試みた:

DontRefresh component = new DontRefresh(); 
RepaintManager.currentManager(component).markCompletelyClean(component); 

が、何も働かなかった。

+1

あなたが望む効果は実際には正確ではありません。ペイント不可能なJPanelに何が表示されるべきかを教えてください:透明であるか固定カラーであるべきですか?最初のケースでは単にsetOpaqueをfalseに設定します。後者では、単に背景に必要な色を塗りつぶします。 –

+1

*「JFrameの一部ですべてのペイントとリフレッシュを完全に無効にしようとしています。」*意図的にGUIを破棄しようとしていますか?その機能は何を提供しますか? –

答えて

5

あなたがしていることを正確に知らなくても、何も表示されないようにしたい空間に「フィラーパネル」(何もしないだけのJPanel)があることをお勧めします他のすべてのパネル。

あなたはJFrameを持っていると言います。右上に何も表示させたくない場合は、JFrameに4つのJPanel(各コーナーに1つ、左側に1つ、右上隅に1つ、右下に1つ)を塗りつぶすことができます。次に、他のパネルにコンポーネントをスイングします。私はこれがあなたの目的を達成するかどうかは分かりませんが、私はあなたの目的が何であるかを完全には確信していませんので、それが私ができる最高のものです。

+1

彼は自分が何をやっているのか分かりませんが、私は努力のためにあなたを投票します! –

関連する問題