0

JFrameの一部ですべてのペイントと更新を完全に無効にしようとしています。public void paint(Graphics)次のようにオーバーライドするだけで、JFrame全体に目的の効果が得られました。

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 () {}
  }

また、次の方法で更新を無効にしてみました。

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

しかし、何も機能しませんでした。

4

1 に答える 1

5

何をしているのかを正確に知らなくても、何も表示させたくないスペースに「フィラーパネル」(何もしない JPanel のみ) を配置し、すべてに対して他のパネルを配置することをお勧めします。そうしないと。

JFrame があるとします。右上隅に何も表示しないようにする場合は、JFrame を 4 つの JPanel (各隅に 1 つずつ) (または、左側に 1 つ、右上隅に 1 つ、右下隅に 1 つの 3 つ) で埋めることができます。次に、swing コンポーネントをすべて他のパネルに配置します。これがあなたの目的を達成するかどうかはわかりませんが、あなたの目的が何であるかは完全にはわからないので、それが私にできる最善のことです:)それが役に立てば幸いです!

于 2012-04-22T01:27:34.833 に答える