为什么我的标签不在中心?

时间:2017-02-19 00:50:18

标签: java swing

当我按下相应的按钮时,我正试图让我的标签位于窗口的中央,但它只是坐在按钮顶部而不是坐在中间,我不知道为什么< / p>

import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class navigator extends JFrame
{
Container con;
public navigator(){
    super("JFrame");


    JFrame newFrame = new JFrame("Navigator");
    newFrame.setSize(400, 400);
    newFrame.setVisible(true);
    newFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


    con = getContentPane();
    BorderLayout newLayout = new BorderLayout();
    con.setLayout(newLayout);



    JButton newButton = new JButton("Up");
    newFrame.add(newButton, BorderLayout.NORTH);

    JButton newButton2 = new JButton("Left");
    newFrame.add(newButton2, BorderLayout.WEST);

    JButton newButton3 = new JButton("Down");
    newFrame.add(newButton3, BorderLayout.SOUTH);


    JButton newButton4 = new JButton("Right");
    newFrame.add(newButton4, BorderLayout.EAST);




    JLabel newLabel = new JLabel("Going up!");
    newFrame.add(newLabel, BorderLayout.CENTER);
    newLabel.setVisible(false);
    newButton.add(newLabel);


    JLabel newLabel2 = new JLabel("Going left!");
    newFrame.add(newLabel2, BorderLayout.CENTER);
    newLabel2.setVisible(false);
    newButton2.add(newLabel2);


    JLabel newLabel3 = new JLabel("Going down!");
    newFrame.add(newLabel3, BorderLayout.CENTER);
    newLabel3.setVisible(false);
    newButton3.add(newLabel3);


    JLabel newLabel4 = new JLabel("Going right!");
    newFrame.add(newLabel4, BorderLayout.CENTER);
    newLabel4.setVisible(false);
    newButton4.add(newLabel4);



    newButton.addActionListener(new ActionListener()  
    {
     public void actionPerformed(ActionEvent e)
    {
     newLabel.setVisible(true); 
     newLabel2.setVisible(false);         
     newLabel3.setVisible(false);
     newLabel4.setVisible(false);
     }
   });



   newButton2.addActionListener(new ActionListener()   
    {
     public void actionPerformed(ActionEvent e)
    {
     newLabel2.setVisible(true);
     newLabel.setVisible(false);
     newLabel3.setVisible(false);
     newLabel4.setVisible(false);
     }
   });



   newButton3.addActionListener(new ActionListener()      
    {
     public void actionPerformed(ActionEvent e)
    {
     newLabel3.setVisible(true);
     newLabel2.setVisible(false);
     newLabel.setVisible(false);
     newLabel4.setVisible(false);
     }
   });



   newButton4.addActionListener(new ActionListener()      
    {
     public void actionPerformed(ActionEvent e)
    {
     newLabel4.setVisible(true);
     newLabel2.setVisible(false);
     newLabel3.setVisible(false);
     newLabel.setVisible(false);
     }
   });


 }

  public static void main(String[] args){                  
    navigator myNavigator = new navigator();    
  }

  }

2 个答案:

答案 0 :(得分:1)

JLabel newLabel = new JLabel("Going up!");
newFrame.add(newLabel, BorderLayout.CENTER);
newLabel.setVisible(false);
newButton.add(newLabel); // ???

组件只能有一个父组件。因此,您无法将标签添加到框架和按钮。我甚至不确定你为什么要尝试将标签添加到按钮。

在任何情况下,您都无法在框架的中心添加四个标签。 BorderLayout仅允许每个区域中的一个组件,因此只有最后添加的组件才会可见。 BorderLayout仅设置添加的最后一个按钮的大小。所有其他按钮的大小都为(0,0),因此无需绘制任何内容。

所以只需添加一个标签,然后使用ActionListener中的setText(...)方法更改文本。

但是,一旦你解决了这个问题,你仍然会遇到问题。默认情况下,标签会在标签可用空间的左侧绘制。

如果您希望文本显示在中心,则需要使用:

label.setHorizontalAlignment(JLabel.CENTER);

此外,在使框架可见之前,应将所有组件添加到框架中。

最后,类名应以大写字母开头。查看JDK API的类名,并遵循其使用的约定。

答案 1 :(得分:0)

使用BorderLayout时,每个部分只能放置一个控件。所以你只能在CENTER中放一个按钮。

如果你想在一个区域放置更多东西,那么你需要创建一个新的JPanel,将它放在CENTER中,然后将按钮放在新创建的JPanel上。 (当然遵循相同的布局规则)。您可以递归添加任意数量的jpanel。