1

vlcj を直接使用してフルスクリーンを表示する場合は問題ありませんが、最初に固定サイズを設定し、後でオンザフライでフルスクリーンに設定すると、レンダリングが失われます。コード:


    panel_canvas=new JPanel(new BorderLayout());
    panel_canvas.add(windowsCanvas,BorderLayout.CENTER);
    mediaPlayerFactory = new MediaPlayerFactory("--no-video-title-show");
    mediaPlayer = mediaPlayerFactory.newEmbeddedMediaPlayer();    
    mediaPlayer.setVideoSurface(mediaPlayerFactory.newVideoSurface(windowsCanvas));
    frame.setContentPane(panel_canvas);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        
    frame.setLocationRelativeTo(null);
    frame.setSize(600,500);
    frame.setVisible(true);

しかし、「Enter」を押したときにプロセスを使用すると、フルスクリーンになり、失敗します

        frame.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("released ENTER"), "RELEASED_ENTER");
        frame.getRootPane().getActionMap().put("RELEASED_ENTER", new AbstractAction() {            
        @Override
        public void actionPerformed(ActionEvent e) {                
        if(!frame.isUndecorated()){
           pres_size=frame.getSize();               
           prev_location=frame.getLocation();
           frame.dispose();
           frame.setUndecorated(true);
           frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
           frame.setVisible(true);
}
4

2 に答える 2

1

私は同じ問題を抱えていて、この方法で解決しました:

    @SuppressWarnings("deprecation")
	public static void toogleFullScreen(JFrame mainWindow) {
		boolean isPlaying = mainWindow.mediaPlayer.isPlaying();
		if (isPlaying) {
			mainWindow.mediaPlayer.stop();
		}
		if (!mainWindow.isUndecorated()) {
			mainWindow.dispose();
			mainWindow.setAlwaysOnTop(true);
			mainWindow.setUndecorated(true);
			GraphicsEnvironment.getLocalGraphicsEnvironment()
					.getDefaultScreenDevice().setFullScreenWindow(mainWindow);
			BufferedImage cursorImage = new BufferedImage(1, 1,
					Transparency.TRANSLUCENT);
			mainWindow.setCursor(Toolkit.getDefaultToolkit()
					.createCustomCursor(cursorImage, new Point(0, 0),
							"InvisibleCursor"));
			mainWindow.setVisible(true);
			mainWindow.repaint();
		} else {
			GraphicsDevice device = GraphicsEnvironment
					.getLocalGraphicsEnvironment().getDefaultScreenDevice();
			DisplayMode modo = device.getDisplayMode();
			mainWindow.dispose();
			mainWindow.setAlwaysOnTop(false);
			mainWindow.setUndecorated(false);
			mainWindow.setBounds(modo.getWidth() / 2, modo.getHeight() / 2,
					modo.getWidth() / 2, modo.getHeight() / 2);
			device.setFullScreenWindow(null);
			mainWindow.setCursor(Cursor.DEFAULT_CURSOR);
			mainWindow.setVisible(true);
			mainWindow.repaint();
		}
		if (isPlaying) {
			mainWindow.mediaPlayer.start();
		}
	}

FullScreen を設定している間はプレーヤーを停止するだけです。

于 2014-10-13T00:41:30.013 に答える
1

コードに次のメソッドを適用して、Swing でフルスクリーンを切り替えます。

int lastState = 0;
Rectangle lastBounds = null;

private void toggleDecoration(boolean decorated) {
    dispose();
    if (decorated) {
        //save last bounds and its extended state
        lastState = getExtendedState();
        lastBounds = getBounds();
        try{
            setExtendedState(getExtendedState() | JFrame.MAXIMIZED_BOTH);
        }
        catch(Exception ev){
            setBounds(getGraphicsConfiguration().getDevice().getDefaultConfiguration().getBounds());
            ev.printStackTrace();
        }
    }
    else {
        //restore last bounds and its extended state
        setBounds(lastBounds);
        setExtendedState(lastState);
    }
    setUndecorated(decorated);
    setVisible(true);
}

使用法:

decorated = !decorated;
toggleDecoration(decorated);
于 2012-08-07T01:57:44.777 に答える