当我按下相应的按钮时,我正试图让我的标签位于窗口的中央,但它只是坐在按钮顶部而不是坐在中间,我不知道为什么< / 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();
}
}
答案 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。