java 如何将组件上下_java – 如何将组件放在现有组件正下方的JLayeredPane中?

我有一个JTextField,就在它下面我想要显示一个放在JLayeredPane中的JLabel(稍后我会用它来进行自动建议).

如何将JLabel放在JTextField正下方的JLayeredPane中?

这是我的一些代码,以下屏幕截图中显示的当前结果如下:

public static void main(String[] args) {

JTextField field = new JTextField();

JLabel lbl = new JLabel("Hello");

lbl.setBackground(Color.YELLOW);

lbl.setOpaque(true);

JLayeredPane layeredPane = new JLayeredPane();

layeredPane.setLayout(new GridLayout(0,1));

layeredPane.add(lbl, (Integer) (JLayeredPane.POPUP_LAYER - 10));

layeredPane.setPreferredSize(field.getPreferredSize());

JPanel panel = new JPanel(new BorderLayout());

panel.add(field, BorderLayout.NORTH);

panel.add(layeredPane, BorderLayout.SOUTH);

JFrame frame = new JFrame();

frame.add(panel);

frame.setSize(200, 360);

frame.setVisible(true);

}

第二次尝试:

public static void main(String[] args) {

JTextField field = new JTextField();

JLabel lbl = new JLabel("Hello");

lbl.setBackground(Color.YELLOW);

lbl.setOpaque(true);

lbl.setBounds(field.getBounds().x, field.getBounds().y,

field.getBounds().width, field.getBounds().height);

JPanel popPanel = new JPanel(new BorderLayout());

popPanel.add(lbl, BorderLayout.NORTH);

popPanel.setLocation(field.getLocation().x+10, field.getLocation().y+20);

popPanel.setPreferredSize(field.getPreferredSize());

JFrame frame = new JFrame();

JLayeredPane layeredPane = frame.getRootPane().getLayeredPane();

layeredPane.setLayout(new GridLayout(0,1));

layeredPane.add(popPanel, (Integer) (JLayeredPane.POPUP_LAYER - 10));

JPanel panel = new JPanel(new BorderLayout());

panel.add(field, BorderLayout.NORTH);

frame.add(panel);

frame.setSize(200, 360);

frame.setVisible(true);

}

解决方法:

将layeredPane添加到“CENTER”,而不是SOUTH.

但是,您对平铺窗格的理解似乎有点困惑.如果希望多个组件显示在彼此的顶部(堆叠?),则可以使用分层窗格.您仍然在二维中使用分层窗格,这是不必要的.你可以使用一个面板.

如果要弹出建议列表,则应使用JPopupMenu并将其放在文本字段下方.阅读Bringing up Popup Menus上的Swing教程中的部分.

标签:java,swing,jlayeredpane

来源: https://codeday.me/bug/20190610/1209948.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值