禁用JPanel上的绘画

时间:2012-04-21 23:24:24

标签: java swing jpanel paint jcomponent

我正在尝试完全禁用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);

但没有任何效果。

1 个答案:

答案 0 :(得分:5)

好吧,如果你不确切知道自己在做什么,我会建议你在你不想要任何东西出现的空间里有一个“填充面板”(只是一个你不做任何事情的JPanel)然后有其他的其他一切的面板。

所以说你有一个JFrame。如果你想让右上角永远不显示任何东西,你可以用4个JPanel填充JFrame,每个角落一个(或者左边有一个,右上角有一个,右下角有一个)。然后将所有摆动组件放在其他面板中。我不知道这是否会达到你的目的,但我不完全确定你的目的是什么,所以这是我能做到的最好的:)我希望它有所帮助!