簡體   English   中英

為什么這個JLabel不在這個Java應用程序的中心?

[英]Why isn't this JLabel in the center of this Java application?

新手Java程序員在這里:

每當我遇到問題時,我都不想問問題,但是我看不到應該如何使用綠色的“ Hello World”標簽進入JPanel的中心。 這是我的代碼:

package game;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Javagame extends JPanel implements ActionListener{
    protected JButton b1;
    private JLabel label;
    public Javagame() {
        b1 = new JButton("Button!");
        b1.setActionCommand("change");

        b1.addActionListener(this);
        add(b1);

        label = new JLabel("Hello World!", SwingConstants.CENTER);
        label.setFont(new Font("Arial", Font.BOLD, 20));
        label.setForeground(new Color(0x009900));
        add(label, BorderLayout.CENTER);
    }
    public void actionPerformed(ActionEvent e) {
        if ("change".equals(e.getActionCommand())) {
            label.setText("Hello Universe!");   
            b1.setActionCommand("changeBack");
        }
        if ("changeBack".equals(e.getActionCommand())) {
            label.setText("Hello World!");
            b1.setActionCommand("change");
        }
    }
    private static void createWindow(){
        JFrame frame = new JFrame("Javagame");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setPreferredSize(new Dimension(500,500));

        Javagame newContentPane = new Javagame();
        newContentPane.setOpaque(true);
        frame.setContentPane(newContentPane);

        frame.setLocationRelativeTo(null);
        frame.pack();
        frame.setVisible(true);
    }
    public static void main(String[] args) {
        createWindow();
    }
}

BorderLayout.CENTERadd()似乎不起作用。 任何幫助,將不勝感激,謝謝!

JLabel位於父容器的中心,文本在標簽內對齊。

嘗試...

label.setHorizontalAlignment(JLabel.CENTER);
label.setVerticalAlignment(JLabel.CENTER);

BorderLayout.CENTER似乎不起作用

JPanel的默認布局是FlowLayout。 您需要將布局設置為BorderLayout。

另外,您需要將按鈕添加到BorderLayout的NORTH。

然后,按鈕將出現在頂部,標簽將居中。

添加標簽時,請使用FlowLayout字段。

//Code apove
label = new JLabel("Hello World!", SwingConstants.CENTER);
label.setFont(new Font("Arial", Font.BOLD, 20));
label.setForeground(new Color(0x009900));
add(label, FlowLayout.CENTER);//!!
//Code under

因為您尚未更改面板中的布局,所以請勿使用BorderLayout。

如果您真的想使用BorderLayout而不是FlowLayout,請在其中添加setLayout()命令。

//Code apove
label = new JLabel("Hello World!", SwingConstants.CENTER);
label.setFont(new Font("Arial", Font.BOLD, 20));
label.setForeground(new Color(0x009900));
setLayout(new BorderLayout()); //!!
add(label, BorderLayout.CENTER);
add(b1,BorderLayout.????); //Edited
//Code under

@Edit-在setLayout()方法之后也添加按鈕,或者在設置面板時在開頭設置布局

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM