java – 在JLayeredPane中使用GridBagLayout
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 在JLayeredPane中使用GridBagLayout,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2854字,纯文字阅读大概需要5分钟。
内容图文
![java – 在JLayeredPane中使用GridBagLayout](/upload/InfoBanner/zyjiaocheng/748/fc97fa78de0d4db48f30812bec5e3592.jpg)
我试图在JPanel的右上角有一个小的浮动“小部件”.它是一个固定大小的组件 – 如果有帮助,可以考虑谷歌地图中的指南针.
我意识到JLayeredPane只对所有层使用一个布局管理器,因此认为使用GBL成功:
– 使右上角(1,0)框非常小,并将小部件放在那里
– 使内容面板的宽度/高度为2
但经过实验,似乎GBL在重叠时会删除一些组件.
任何人都可以建议一种伪造这种行为的方法吗?
解决方法:
它是一个分层的窗格,因此每个层都可以有一个容器,如果需要,它可以使用自己的布局.我不会给JLayeredPane本身任何布局,而是使用其默认的null布局,然后考虑将小浮动小部件放在透明(非不透明)JPanel中,使用任何所需的布局,并将透明JPanel添加到鞋面JLayeredPane的一层.
例如,此代码将指南针的图像放在非不透明JPanel的右上角,该JPanel分层显示在显示浮雕贴图的JLabel上:
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.*;
@SuppressWarnings("serial")
public class LayeredExample extends JLayeredPane {
public static final String MAP_URL = "http://upload.wikimedia.org/" +
"wikipedia/commons/c/c4/Maps-for-free_Sierra_Nevada.png";
public static final String COMPASS_URL = "http://upload.wikimedia.org/" +
"wikipedia/commons/thumb/f/f8/Compass_Rose_English_North.svg/" +
"200px-Compass_Rose_English_North.svg.png";
private Dimension imageSize;
private JLabel defaultLabel = new JLabel();
private JPanel palettePane = new JPanel();
private JLabel compassLabel = new JLabel();
public LayeredExample() {
try {
URL mapUrl = new URL(MAP_URL);
BufferedImage mapImage = ImageIO.read(mapUrl);
ImageIcon mapIcon = new ImageIcon(mapImage);
defaultLabel.setIcon(mapIcon);
URL compassUrl = new URL(COMPASS_URL);
BufferedImage compassImage = ImageIO.read(compassUrl);
ImageIcon compassIcon = new ImageIcon(compassImage);
compassLabel.setIcon(compassIcon);
imageSize = new Dimension(mapImage.getWidth(), mapImage.getHeight());
setPreferredSize(imageSize);
defaultLabel.setSize(imageSize);
defaultLabel.setLocation(0, 0);
palettePane.setSize(imageSize);
palettePane.setLocation(0, 0);
JPanel northPalettePane = new JPanel(new BorderLayout());
northPalettePane.setOpaque(false);
northPalettePane.add(compassLabel, BorderLayout.EAST);
palettePane.setOpaque(false);
palettePane.setLayout(new BorderLayout());
palettePane.add(northPalettePane, BorderLayout.NORTH);
add(defaultLabel, JLayeredPane.DEFAULT_LAYER);
add(palettePane, JLayeredPane.PALETTE_LAYER);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private static void createAndShowUI() {
JFrame frame = new JFrame("LayeredExample");
frame.getContentPane().add(new LayeredExample());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
createAndShowUI();
}
});
}
}
内容总结
以上是互联网集市为您收集整理的java – 在JLayeredPane中使用GridBagLayout全部内容,希望文章能够帮你解决java – 在JLayeredPane中使用GridBagLayout所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。