2

新手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.CENTER似乎在add(). 任何帮助将不胜感激,谢谢!

4

3 回答 3

2

JLabel父容器内居中,文本在标签内对齐。

尝试...

label.setHorizontalAlignment(JLabel.CENTER);
label.setVerticalAlignment(JLabel.CENTER);
于 2013-05-31T02:37:07.710 回答
2

BorderLayout.CENTER 似乎不起作用

JPanel 的默认布局是 FlowLayout。您需要将布局设置为 BorderLayout。

此外,您需要将按钮添加到 BorderLayout 的 NORTH。

然后按钮将出现在顶部,标签将居中。

于 2013-05-31T02:38:30.063 回答
0

添加标签时使用 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() 方法之后也添加您的按钮,或者在您制作面板时在开头设置布局

于 2013-05-31T04:28:58.980 回答