繁体   English   中英

用于此设计的布局管理器

[英]What Layout Manager to use for this Design

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

在此处输入图像描述 我为 BackgroundFrame.java 使用了 BorderLayout.CENTER,但我不确定左面板和右面板使用什么布局。 从上面提供的插图中可以看出,我希望左侧面板显示在左侧,但在 BackgroundFrame.java 的顶部(右侧面板也一样,但在右侧)。 我应该为 MainFrame 类中的左右面板使用什么布局管理器。

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

背景框架.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));
    
    }
}

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM