编程语言
首页 > 编程语言> > java – 如何将组件放在现有组件正下方的JLayeredPane中?

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