在JAVA中使用多个布局管理器

时间:2017-06-01 15:33:06

标签: java user-interface layout jbutton

我想将button放在“898 Food Restaurant”Jlabel下面。 setLocation()的{​​{1}}无效。

button

enter image description here

2 个答案:

答案 0 :(得分:2)

每个JComponent(如JPanel)一次只能有一个布局管理器。但由于JComponents可以嵌套,因此您可以在JFrame中使用不同的布局管理器。通常,这就是您创建复杂布局的方式。

现在提出有关按钮放置的问题。由于您的按钮位于JPanel中,因此setLocation不会执行任何操作,默认情况下它使用忽略位置属性的FlowLayout。第一步是将buttonPanel布局设置为null。但这仍然可能还不够,因为buttonPanel由另一个流布局定位,该布局将设置它的边界不在嵌套按钮的位置坐标内。 您可以通过将其背景设置为不同的颜色来始终查看您的JPanel界限。

我的建议是始终尝试使用布局管理器定位组件并避免绝对定位。

答案 1 :(得分:0)

您可以使用BoxedLayout代替FrameLayout:

    import java.awt.*;  
    import javax.swing.*;  
    import java.io.*;
    import java.awt.image.*;
    import javax.imageio.*;

    class MainMenu extends Frame {  
    JLabel picLabel,title;
    JButton button;


     public MainMenu () { 
        JPanel panel = new JPanel(new BorderLayout());
    try{
       BufferedImage myPicture = ImageIO.read(new File("C:\\Users\\seng\\workspace\\FoodOrderingSystem\\ramen-noodles.png"));

       Image scaled = myPicture.getScaledInstance(170,170,Image.SCALE_SMOOTH);
       picLabel = new JLabel(new ImageIcon(scaled));}catch(Exception e){}
       title = new JLabel("898 Food Restaurant"); 
       title.setFont(new Font("Serif",Font.ITALIC+Font.BOLD,18));
       title.setForeground(Color.BLUE);
       button = new JButton("Order Food Now >>");
       panel.add(picLabel,BorderLayout.CENTER);
       panel.add(title,BorderLayout.SOUTH);
       JPanel buttonPanel = new JPanel();
       buttonPanel.add(button);
       add(panel); 
    add(buttonPanel);
       setLayout (new BoxLayout (this, BoxLayout.Y_AXIS));  
       setSize(400,400);  
       setVisible(true);  
    }  

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