禁用JPanel上的绘画

nuj*_*uju 0 java swing paint jcomponent jpanel

我试图在JFrame的一部分上完全禁用所有绘画和刷新.通过简单地覆盖,我在整个JFrame上获得了预期的效果public void paint(Graphics):

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

  }
Run Code Online (Sandbox Code Playgroud)

我想要同样的效果,但只能在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 () {}
  }
Run Code Online (Sandbox Code Playgroud)

我也尝试通过以下方式禁用刷新:

DontRefresh component = new DontRefresh();
RepaintManager.currentManager(component).markCompletelyClean(component);
Run Code Online (Sandbox Code Playgroud)

但没有任何效果.

ken*_*dds 5

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

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