JInternalFrame
의 제목 표시 줄 높이를 어떻게 알 수 있습니까? OS와 L & F 독립적 인 방식으로이 작업을 수행하는 것이 바람직합니다.JInternalFrame의 제목 표시 줄 높이를 가져 오는 방법은 무엇입니까?
나는이 SO question을 보았습니다. 비슷한 질문을하고있는 것 같지만, JDialog
입니다.
는 컨테이너의 경계 크기를 표시하는 컨테이너의 인 세트의 값을 결정합니다 그러나, 대답은
Container
방법getInsets()
에 대한 javadoc 상태를 사용하는 것이 좋습니다 것 같다.예를 들어 프레임 객체에는 프레임의 제목 표시 줄 높이에 해당하는 상단 인세 트가 있습니다.
불행하게도, JInternalFrame
는 Frame
하지만 JComponent
없습니다. 따라서 경계의 크기 만 제공합니다.
이전의 질문에서 유스 케이스가 무엇인지 묻습니다 ... 그래서 제 설명하겠습니다. JInternalFrame
을 생성하고 마우스 클릭 시점에서 팝업되고 상위 프레임 내에서 마우스 클릭의 오른쪽 하단에 현재 표시된 공간보다 크지 않음을 포함하여 최대/최소 기준 크기로 크기를 조정하려고합니다.
는 다음 SSCCE 고려 : 당신이 이것을 실행하면 당신이 보는 바와 같이, 내부 팝업이 폭에 맞게 크기있다
/**
* @author amaidment
*/
public class JInternalFrameToy {
public static void main(String[] args) {
// create top-level frame
final JFrame frame = new JFrame("JInternalFrame Toy");
frame.setPreferredSize(new Dimension(500, 500));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// create desktop pane
final JDesktopPane pane = new JDesktopPane();
// put button on the base of the desktop pane
JButton button = new JButton("Create Internal Frame");
button.setSize(new Dimension(100,100));
button.setVisible(true);
button.setLocation(0, 0);
button.setSelected(true);
pane.add(button);
frame.setContentPane(pane);
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// create internal frame
JInternalFrame internal = new JInternalFrame("Internal Frame",
true, true, false, false);
JLabel label = new JLabel("Hello world!");
// set size of internal frame
Dimension parentSize = pane.getParent().getSize();
Insets insets = internal.getInsets();
Point point = pane.getMousePosition();
int width = parentSize.width - (insets.left+insets.right) - point.x;
int height = parentSize.height - (insets.top+insets.bottom) - point.y;
label.setPreferredSize(new Dimension(width, height));
internal.setContentPane(label);
internal.setLocation(point);
internal.pack();
internal.setVisible(true);
pane.add(internal);
internal.toFront();
}
});
frame.pack();
frame.setVisible(true);
}
}
있지만 높이 - 높이가 프레임 크기를 초과 즉 .. JInternalFrame
의 제목 표시 줄 높이. 따라서이 높이를 알아 내서 JInternalFrame
의 크기를 적절하게 설정할 수 있습니다.
같은 것이 OS & L & F 독립 될 것인가요 시도 할 수 있을까? – amaidment
... 대부분 ... Nimbus에 대해서는 잘 모르겠지만 현재 L & F의 모든 곳에서는 기본으로 BasicInternalFrameUI를 사용합니다. 당신은 그걸 가지고 놀아야 만합니다. – MadProgrammer
BasicInternalFrameUI의 코드를 보면 모든 레이아웃 코드가 여기에 있으며 제목 칸이 들어있는 북쪽 창에 액세스 할 수있는 유일한 곳입니다. Nimbus는 Synth 및 Synth 서브 클래스 Basic을 기반으로하므로 잘해야합니다. – Joshua