[英]Java Swing: Anchor images to the corners of a JFrame
我正在使用eclipse和Google的WindowBuilder Pro Plugin來設計一個swing應用程序。 我已經使用組布局和它們的組件構建了功能齊全的JFrame。 我現在正在嘗試將圖像添加到所有JFrame的角落。 當我嘗試拖放時,從WindowBuilder Pro插件中,功能所有組件和JFrame本身移動和調整大小。
有沒有辦法以編程方式或拖放方式將這些圖像放置在我的框架的角落並將它們錨定在那里,以便當JFrame調整大小時,圖像會保留在各自的角落?
我試過的編程代碼:
BufferedImage image = ImageIO.read(getClass().getResource("image path"));
JLabel label = new JLabel(new ImageIcon(image));
label.setBounds(0,0,100,100);
add(label);
這適用於左上角,但我似乎無法弄清楚如何將其他圖像錨定到其他角落。
提前致謝!!!
編輯:我希望所有現有組件保持原樣,並將圖像嵌入所有現有組件后面的JFrame角落。
不要使用null布局和setBounds()! 使用適當的布局管理器。
例如,JFrame的默認布局管理器是BorderLayout。 因此,您可以創建另一個也使用BorderLayout的JPanel。 然后,您可以將圖像添加到面板的WEST和EAST。 然后將面板添加到框架的NORTH。
有關更多信息,請參見如何使用邊框布局 。 實際上,閱讀布局管理器的整個部分。
你可以計算角坐標; 基本概念是靠背部件寬度/高度; 例如 :
x,y - 坐標
w,h - 角組件比例
讓我們計算一些角落的坐標......
左上角:x = 0; Y = 0; W = 100; H = 100;
右上角:x = parentComponent.width-w; Y = 0; W = 100; H = 100;
右下角:x = parentComponent.width-w; Y = parentComponent.height-H; W = 100; H = 100;
...所以,正如您所看到的,您可以將您的alg基於父組件寬度/高度,例如; 在你的情況下它是像一個代碼
label.getParent();
報告是否有幫助
如果您使用setBounds
方法,您可能需要知道您為標簽指定的位置是最終位置,並且在將componentListener
添加到框架並調用componentResized
方法之前無法更改,每次調整框架大小時都必須設置標簽的新位置。
然而,這不是解決這個問題的最好方法,我告訴你不要用這種方式,希望其他人(或專家) 給出另一個更好的答案。
但無論如何,不可能看看這個例子:
private JLabel lable ;
private Icon img;
// default constructor
public AnchoreImage(){
setVisible(true);
setDefaultCloseOperation(3);
img = new ImageIcon(AnchoreImage.class.getClass().getResource("/path to image"));
lable = new JLabel("text",img, JLabel.LEADING);
lable.setBounds(getWidth()-img.getIconWidth(), 20, img.getIconWidth(),img.getIconWidth());
add(lable);
addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
lable.setLocation(getWidth()-(img.getIconWidth()+20), 20);
}
});
pack();
setSize(400,400);
setLayout(null);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.