我怎样才能在框架 Swing 中居中标签?

how can i center Label in frame Swing?

我想把下图的版权放在画面中央。 我尝试添加 SwingConstants.CENTERComponent.CENTER_ALIGNMENT 但都不起作用。 有人可以帮我解决这个问题吗?提前致谢。

enter image description here

这是我的代码:

import javax.swing.*;
import java.awt.*;

public class MyFrame extends JFrame {
    JTextField text1;
    JTextField text2;
    JLabel label1;
    JLabel label2;
    JButton encrypt;
    JButton decrypt;
    JLabel copyright;
    //constructor
    public MyFrame(){
        super("Encryption and Decryption");
        setLayout(new FlowLayout());        //add first text field
        label1 = new JLabel("enter a text:  ");
        add(label1);
        text1= new JTextField(10);
        add(text1);

        //add second text field
        label2 = new JLabel("result:  ");
        add(label2);
        text2= new JTextField(10);
        add(text2);
        encrypt = new JButton("encrypt!");
        add(encrypt);
        decrypt = new JButton("decrypt!");
        add(decrypt);
        copyright = new JLabel(" © Project realized by Ayoub Touti ");
        add(copyright);

        //organizing elements in a panel
        JPanel panel = new JPanel(new GridLayout(4,2,12,6));
        panel.add(label1);
        panel.add(text1);
        panel.add(label2);
        panel.add(text2);
        panel.add(encrypt);
        panel.add(decrypt);
        panel.add(copyright);
        add(panel);
    }
}

//////////////////////////////

import javax.swing.*;
public class main {
    public static void main(String[] args) {
        MyFrame frame = new MyFrame();
        frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
        frame.setSize (500, 200);
        frame.setResizable(true);
        frame.setVisible (true);
        frame.setLocationRelativeTo(null); // to open the window in the main screen
    }
}

使用GridBagLayout(或通过复合组件组合布局,下面略作演示)

import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;

public class Main {
    public static void main(String[] args) {
        new Main();
    }

    public Main() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame frame = new JFrame();
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        public TestPane() {
            setBorder(new EmptyBorder(32, 32, 32, 32));
            setLayout(new GridBagLayout());
            GridBagConstraints gbc = new GridBagConstraints();
            gbc.gridx = 0;
            gbc.gridy = 0;
            gbc.anchor = gbc.LINE_END;
            gbc.insets = new Insets(0, 8, 0, 8);

            add(new JLabel("enter a text:"), gbc);
            gbc.gridy++;
            add(new JLabel("result:"), gbc);

            gbc.gridx = 1;
            gbc.gridy = 0;
            gbc.anchor = gbc.LINE_START;
            add(new JTextField(10), gbc);
            gbc.gridy++;
            add(new JTextField(10), gbc);

            JPanel actionPane = new JPanel(new GridBagLayout());
            gbc.gridx = 0;
            gbc.gridy = 0;
            gbc.weightx = 1;
            gbc.fill = gbc.HORIZONTAL;
            gbc.insets = new Insets(0, 0, 0, 0);

            actionPane.add(new JButton("encyprt!"), gbc);
            gbc.gridx++;
            actionPane.add(new JButton("decyprt!"), gbc);

            gbc = new GridBagConstraints();
            gbc.gridwidth = gbc.REMAINDER;
            gbc.gridy = 2;

            add(actionPane, gbc);
            gbc.gridy++;
            add(new JLabel("© Project realized by Ayoub Touti"), gbc);
        }
    }
}

有关详细信息,请参阅 How to Use GridBagLayout