프레임이 보이게 된 후 setUndecorated ()를 호출하는 방법은 무엇입니까?
-
22-08-2019 - |
문제
스윙 애플리케이션에서는 전체 프레임을 재현하지 않고 장식 및 미개화를 전환 할 수있는 기능을 원합니다. 그러나 API는 전화를 걸지 못하게합니다 setUndecorated()
프레임이 보이게 된 후.
내가 전화하더라도 setVisible(false)
, isDisplayable()
여전히 사실을 반환합니다. API는 프레임을 공연 할 수없는 유일한 방법은 그것을 재창조하는 것입니다. 그러나 나는 일부 타이틀 막대를 끄기 위해 프레임을 재현하고 싶지 않습니다.
전체 화면과 창 모드 사이에서 전환 할 수있는 전체 화면 응용 프로그램을 만들고 있습니다. 상태를 유지하는 동안 전환 할 수 있어야합니다.
프레임이 보이면 어떻게합니까?.
해결책
당신은 할 수 없습니다. 그것은 내가 똑같이 달성하려고 할 때의 경험이었습니다.
그러나 프레임에있는 하나의 패널에 전체 UI가있는 경우 새 프레임을 만들고 해당 패널을 프레임에 추가 할 수 있습니다. 그다지 많은 일이 아닙니다.
이 같은:
// to start with
JPanel myUI = createUIPanel();
JFrame frame = new JFrame();
frame.add(myUI);
// .. and later ...
JFrame newFrame = new JFrame();
newFrame.setUndecorated();
newFrame.add(myUI);
스윙에서 패널 (및 실제로 구성 요소 인스턴스)은 한 번에 한 번의 프레임에만있을 수 있으므로 새 프레임에 추가하면 즉시 이전 프레임에있는 것이 중단됩니다.
다른 팁
당신은 전화를 시도 했습니까? Frame.dispose()
그리고 그것을 바꾸나요? 직접 시도하지는 않았지만 효과가있을 수 있습니다.
그렇지 않다면, 당신이 할 수있는 일은 프레임에 클래스의 중요하지 않은 부분을 갖는 것입니다. 가장 높은 레벨 패널이나 패널에 가장 최소한의 고리 만 있으면 새로운 프레임으로 이동하는 것입니다. 모든 아이들이 따를 것입니다.
방법에서 switchFullscreenMode()
:
dispose();
...
setFullScreenWindow(...);
setUndecorated(true/false);
setBounds(mXPos, mYPos, mWidth, mHeight);
...
setVisible(true);
실제로 마우스가 측면에 닿으면 다시 나타나는 다양한 사이드 패널을 숨기려고 더 많은 것들이 있습니다.
또한 경계를 명시 적으로 설정해야합니다. Window.setExtendedState(MAXIMIZED_BOTH)
Dispose () 근처에 적시에 심하게 방해합니다. 왜냐하면 그들은 분실 된 운영 체제의 여러 기본 사건에 의존하기 때문입니다.
기본 화면을 직접 가져 오는 것이 좋습니다.
GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
대신 화면을 사용하면 JFrame이 현재 켜져 있습니다.
setBounds(getGraphicsConfiguration().getBounds());
getGraphicsConfiguration().getDevice().setFullScreenWindow(this);
현재는 동일하지만 앞으로는 변할 수 있습니다.
부름 dispose()
기본 창 자원을 출시합니다. 그런 다음 미색 등과 같은 속성을 편집 할 수 있습니다. 그런 다음 전화하십시오 setVisible(true)
창자 자원을 재현하고 모든 것이 잘 작동합니다 (포지션과 모든 구성 요소는 변경되지 않음).
dispose();
setUndecorated(true/false);
setVisible(true);
글쎄, 당신은 다른 프레임 인스턴스가 필요할 것입니다. 그것을 재현하지 않고 프레임의 내용을 움직일 수 있습니다. 여기서 핵심은 코드가 특정 프레임에 의존하지 않도록하는 것입니다. 이것은 어쨌든 기본적인 모범 사례입니다.
노력하다:
dispose();
setUndecorated(true);
setVisible(true);
확인 해봐. 도움이되기를 바랍니다 !!
다음은 만드는 방법에 대한 코드입니다 대체 + 입력하다 막대 모드없이 전체 화면을 입력하고 제목 표시 줄과 시작 막대를 표시하여 최소화합니다.
public class myTest extends JFrame{
//Your codes...
//if "ALT" key on hold and "Enter" key pressed with it
if (evt.isAltDown() && evt.getKeyCode() == evt.VK_ENTER) {
//if the JFrame has Title bar
if (isUndecorated()) {
//this will dispose your JFrame
dispose();
//here to set it with no Title bar
setUndecorated(false);
pack();
setLocationRelativeTo(null);
//as you dispose your JFrame, you have to remake it Visible..
setVisible(true);
} else {
dispose();
setUndecorated(true);
setExtendedState(MAXIMIZED_BOTH);
setVisible(true);
}
}
//your codes
}