【问题标题】:What Layout Manager to use for this Design用于此设计的布局管理器
【发布时间】:2022-07-22 00:00:09
【问题描述】:

有很多布局管理器,它有点压倒性,我很困惑使用什么布局管理器来在 bg 图像 (BackgroundFrame.java) 顶部显示左面板 (LefrFrame.java) 和左侧。我不知道如何进一步描述它,但我在下面提供了一个插图,以便清楚地解释我的困境。

我为 BackgroundFrame.java 使用了 BorderLayout.CENTER,但我不确定左面板和右面板使用什么布局。正如您从上面提供的插图中看到的那样,我希望左侧面板显示在左侧,但在 BackgroundFrame.java 的顶部(右侧面板也是如此,但在右侧)。 MainFrame 类中的左右面板应该使用什么布局管理器。

除此之外,我还包括了我的部分代码。

BackgroundFrame.java

Public class BackgroundFrame extends JPanel {
    ImageIcon img;
    BufferedImage bufferedImage;
    
    public BackgroundFrame() {
   
        
    try {
    bufferedImage = ImageIO.read(new File("bgpic.png"));
    img = new ImageIcon(bufferedImage);
    JLabel bg = new JLabel(img);
    bg.setSize(500, 500);
    add(bg);
    
    } catch (IOException e) {
        System.out.println("Error");
        //to check if image is showing
}
        /*
    BufferedImage bufferedImage = ImageIO.read(new File("bg.png"));
    img = new ImageIcon("bgpic.png");
    JLabel bg = new JLabel(img);
    bg.setSize(500, 500);
    add(bg);
    */
   
    }
    
}

MainFrame.java

public class MainFrame extends JFrame {
    
    LeftFrame lf;
    RightFrame rf;
    BackgroundFrame bg;
    
    public MainFrame() {
        
        super("Layout");
        
        lf = new LeftFrame();
        //lf.setLayout(new FlowLayout(FlowLayout.LEFT));
        //add(lf, BorderLayout.WEST);
        lf.add(this, BorderLayout.WEST);
        
        rf = new RightFrame();
        //rf.setLayout(new FlowLayout(FlowLayout.RIGHT));
        //add(rf, BorderLayout.PAGE_START);
        rf.add(this, BorderLayout.EAST);
        
        bg = new BackgroundFrame();
        add(bg, BorderLayout.CENTER);
        //bg.add(this, BorderLayout.CENTER);
        
        setSize(5000,5000);
    setVisible(true);
    this.pack();
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

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

LeftFrame.java

public class LeftFrame extends JPanel {
    LeftFrame lf;
    TextArea tarea;
    
    public LeftFrame() {
    
       
        tarea = new TextArea();
        add(lf, tarea);
        
        /*
        this.setBackground(Color.WHITE);
        this.setSize(100, 100);
        */
    //lf.setLayout(new FlowLayout(FlowLayout.LEFT));
    
    }
}

【问题讨论】:

    标签: java swing layout layout-manager


    【解决方案1】:

    我为 BackgroundFrame.java 使用了 BorderLayout.CENTER,但我不确定左面板和右面板使用什么布局。

    您的背景图像应该由添加到内容窗格下方框架的 LayeredPane 中的 JLabel 显示。 (见https://docs.oracle.com/javase/tutorial/uiswing/components/toplevel.html

    要将四个面板定位在一个网格中,请使用 JFrame 的 2 列和 2 行内容窗格上的 GridLayout(请参阅https://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html#grid)。将面板添加到 JFrame 或 JFrame.getContentPane()。

    四个面板的布局管理器取决于您要在其中显示的内容。

    【讨论】:

      猜你喜欢
      • 2014-08-10
      • 1970-01-01
      • 1970-01-01
      • 2013-06-17
      • 2018-06-12
      • 2016-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多