Java画布仅在大小上增加

Java画布仅在大小上增加,java,swing,canvas,Java,Swing,Canvas,我有一个JPanel,它的布局是BorderLayout,我在其中添加了一个画布,所以基本上画布应该填充JPanel,事实上这就是所发生的事情 现在的问题是调整大小,当我调整JPanel所在帧的大小时,画布的大小只会增加。我的意思是,如果我在运行后拖动鼠标来增加JFrame的大小,JPanel的大小和画布都会增加。但是如果我只减少画布的大小,它就会保持原来的大小 我确信这一点,因为我在面板中添加了一个listenner,这样它就可以在System.out中打印画布的大小 我需要这个为媒体播放器工

我有一个JPanel,它的布局是BorderLayout,我在其中添加了一个画布,所以基本上画布应该填充JPanel,事实上这就是所发生的事情

现在的问题是调整大小,当我调整JPanel所在帧的大小时,画布的大小只会增加。我的意思是,如果我在运行后拖动鼠标来增加JFrame的大小,JPanel的大小和画布都会增加。但是如果我只减少画布的大小,它就会保持原来的大小

我确信这一点,因为我在面板中添加了一个listenner,这样它就可以在System.out中打印画布的大小

我需要这个为媒体播放器工作。。。在我决定把它缩小之前,它一直工作得很好。下面是代码:

public class NewJFrame extends javax.swing.JFrame {

EmbeddedMediaPlayerComponent media;
MediaPlayerFactory fact;
EmbeddedMediaPlayer player;
MediaListPlayer listPlayer;
MediaList list;
CanvasVideoSurface surface;
private EmbeddedMediaPlayerComponent media1;

SimpleDateFormat format = new SimpleDateFormat("kk:mm:ss.SSS");
Canvas cnv;
boolean done=false;
  public NewJFrame() {
    initComponents();
    NativeLibrary.addSearchPath(
            RuntimeUtil.getLibVlcLibraryName(), "C:\\Program Files\\VideoLAN\\VLC"
    );
    pnl.setLayout(new BorderLayout());
    Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class);

    media = new EmbeddedMediaPlayerComponent();

    this.setLocation(100, 100);
    this.setSize(200, 200);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setVisible(true);

    cnv = new Canvas();
    cnv.setVisible(true);
    pnl.setLayout(new BorderLayout());
    pnl.add(cnv);
    fact = new MediaPlayerFactory();
    player = media.getMediaPlayer();

    surface = fact.newVideoSurface(cnv);
    player.setVideoSurface(surface);
    media.getMediaPlayer().setVideoSurface(surface);

    listPlayer = fact.newMediaListPlayer();
    listPlayer.setMediaPlayer(player);
    list = fact.newMediaList();
    listPlayer.setMediaList(list);
    listPlayer.setMode(MediaListPlayerMode.LOOP);

    done=true;
    }
    private void pnlAncestorResized(java.awt.event.HierarchyEvent evt) {                                    
    // TODO add your handling code here:
 if(done){

     System.out.println("x " + cnv.getWidth() + " y " + cnv.getHeight());
 }
}  
PS:我不确定是否需要BorderLayout,我认为默认情况下,添加组件时会占用其所有容器空间。。。如果我也能得到答案的话

更新:我尝试了这个解决方案,但它奏效了,不知道为什么设置最小大小会奏效


谢谢你

1你会想要创建并发布一个非常小的,事实上,我们可以运行、测试并希望改进它。2出于好奇,你为什么要使用画布,AWT组件和Swing GUI?2因为媒体播放器只在画布上绘制,我试着用AWT面板来做,但还是一样result@HovercraftFullOfEels1一