繁体   English   中英

如何在Swing中堆叠标签?

[英]How do I stack labels in Swing?

我正在编写我的第一个Swing应用程序,但是在代码中堆叠标签时遇到了一些麻烦。

我现在有以下内容

First Swing应用

我想在“该仓库的所有者搜索未解决的问题”上方输入“输入仓库的名称和仓库名称”。 所以窗户不是那么宽

这是我的代码:

public class MainFrame extends JFrame {

    private Boolean submitted = false;

    public MainFrame(String title) {
        super(title);


        // Set layout manager
        setLayout(new BorderLayout());

        // Create components
        JPanel panOuter = new JPanel(new BorderLayout());
        JPanel panLeft = new JPanel(new BorderLayout());

        panLeft.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
        JPanel panRight = new JPanel(new BorderLayout());
        panRight.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
        JPanel panBottom = new JPanel();
        panBottom.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
        JPanel panTop = new JPanel();
        panTop.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
        JPanel panTopTop = new JPanel();
        panTopTop.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
        JPanel panTopBottom = new JPanel();
        panTopBottom.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));

        // Add components to content panel
        panOuter.add(panLeft, BorderLayout.WEST);
        panOuter.add(panRight, BorderLayout.EAST);
        panOuter.add(panBottom, BorderLayout.SOUTH);
        panOuter.add(panTop, BorderLayout.NORTH);


        JLabel lblTop1 = new JLabel("Enter the name of the repo and the name of the\n", JLabel.CENTER);
        JLabel lblTop2 = new JLabel("owner of that repo to search for open issues.\n", JLabel.CENTER);
        JLabel lblLeft = new JLabel("Repo", JLabel.CENTER);
        JLabel lblRight = new JLabel("Owner", JLabel.CENTER);

        JTextField txtLeft = new JTextField("Hello", 10);
        JTextField txtRight = new JTextField("World", 10);

        JButton btnBottom = new JButton("Submit!");

        panLeft.add(lblLeft, BorderLayout.NORTH);
        panLeft.add(txtLeft, BorderLayout.CENTER);

        panRight.add(lblRight, BorderLayout.NORTH);
        panRight.add(txtRight, BorderLayout.CENTER);

        panBottom.add(btnBottom);
        panTopTop.add(lblTop1);
        panTopBottom.add(lblTop2);
        panTop.add(panTopTop, BorderLayout.NORTH);
        panTop.add(panTopBottom, BorderLayout.SOUTH);

        this.setContentPane(panOuter);
        this.pack();

        btnBottom.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                if(!submitted)
                    btnBottom.setText(txtLeft.getText());
                else 
                    btnBottom.setText(txtRight.getText());
                submitted = !submitted;
            }

        });
    }

}

我试图制作一个具有标签的NORTH SOUTH组件的面板,但是没有用。

有人有建议吗?

谢谢,erip

您可以尝试使用GridBagLayout ...

JPanel panTop = new JPanel(new GridBagLayout());
panTop.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
//JPanel panTopTop = new JPanel();
//panTopTop.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
//JPanel panTopBottom = new JPanel();
//panTopBottom.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));

//...

//panTopTop.add(lblTop1);
//panTopBottom.add(lblTop2);
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridwidth = GridBagConstraints.REMAINDER;
panTop.add(lblTop1, gbc);
panTop.add(lblTop2, gbc);
//panTop.add(panTopBottom, BorderLayout.SOUTH);

GridBagLayout

有关更多详细信息,请参见如何使用GridBagLayout

现在,您可以真正偷偷摸摸并使用JTextArea ...

文字区域

JTextArea ta = new JTextArea(1, 20);
ta.setText("Enter the name of the repo and the name of the owner of that repo to search for open issues.");
ta.setWrapStyleWord(true);
ta.setLineWrap(true);
ta.setBorder(null);
ta.setFont(UIManager.getFont("Label.font"));
ta.setOpaque(false);
ta.setFocusable(false);
ta.setEditable(false);

//JLabel lblTop1 = new JLabel("<html>Enter the name of the repo and the name of the owner of that repo to search for open issues", JLabel.CENTER);
//JLabel lblTop2 = new JLabel("owner of that repo to search for open issues.\n", JLabel.CENTER);
//...
//panTopTop.add(lblTop1);
//panTopBottom.add(lblTop2);
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridwidth = GridBagConstraints.REMAINDER;
panTop.add(ta, gbc);

甚至只是使用Swing的HTML支持...

HTML布局

JLabel lblTop1 = new JLabel("<html><p align='center'>Enter the name of the repo and the name of the owner of that repo to search for open issues</p>", JLabel.CENTER);
panOuter.add(lblTop1, BorderLayout.NORTH);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM