如何找出JInternalFrame
標題欄的高度? 這將是最好的在一個操作系統和獨立的方式L &。我如何獲得JInternalFrame標題欄的高度?
我看到這個SO question,這似乎是問一個類似的問題,但爲JDialog
。然而,答案似乎使用Container
方法getInsets()
,爲此javadoc狀態表明:
確定此容器的insets,它指示容器邊框的大小。
例如,一個框架對象有一個與框架標題欄的高度對應的頂部插入。
不幸的是,JInternalFrame
不是Frame
,而是JComponent
。因此,這隻能提供邊界的大小。
在之前的SO問題中,有人問及用例是什麼......所以讓我解釋一下我的問題。我想創建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