有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java边框和流布局不显示两个窗口?

我创建了两个参数为BorderLayoutFlowLayout的方法,每个方法都有自己的框架

但只有一个窗口弹出混合布局

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import javax.swing.JLabel;
import javax.swing.JFrame;

public class BLayOut extends JFrame
{
private JFrame fr,fr2;
private JLabel label,label2,label3;

public void win(BorderLayout bl)

{
fr =new JFrame("BorderLayout");

setSize(300,200);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);


setLayout(bl); 

label= new JLabel("Label 1");
label2 = new JLabel("Label 2");
label3 = new JLabel("Label 2");
add(label,BorderLayout.NORTH);
add(label2,BorderLayout.SOUTH);
add(label3,BorderLayout.CENTER);

}

public void win(FlowLayout fl)
{
fr2 =new JFrame("FlowLayout");
setSize(500,200);
setVisible(true);
setLocation(300, 0);
setDefaultCloseOperation(EXIT_ON_CLOSE);


setLayout(fl); 

label= new JLabel("Label 1");
label2 = new JLabel("Label 2");
label3 = new JLabel("Label 3");
add(label);
add(label2);
add(label3);

}


}

class BLayOutMain
{
    public static void main (String args [])
    {
        BLayOut bl = new BLayOut();
        bl.win(new BorderLayout());
        bl.win(new FlowLayout());
    }
}

共 (1) 个答案

  1. # 1 楼答案

    你把你的推荐信弄混了

    首先,创建一个从JFrame扩展的类

    public class BLayOut extends JFrame {
    

    然后声明JFrame的两个实例变量

    private JFrame fr, fr2;
    

    然后在方法中,创建JFrame的一个实例,并将其分配给这些变量之一,然后立即忽略它们

    fr = new JFrame("BorderLayout");
    
    // Which frame are you modifying now...??
    setSize(300, 200);
    setVisible(true);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    
    setLayout(bl);
    
    label = new JLabel("Label 1");
    label2 = new JLabel("Label 2");
    label3 = new JLabel("Label 2");
    add(label, BorderLayout.NORTH);
    add(label2, BorderLayout.SOUTH);
    add(label3, BorderLayout.CENTER);
    

    基本上,这是在设置BLayOut实例的属性,而不是frfr2

    首先,从BLayOut中删除extends JFrame,这会混淆问题,这将生成一个编译器错误列表,其中无法找到方法。这些问题可以通过使用frfr2来解决,具体取决于方法

    fr = new JFrame("BorderLayout");
    
    // Which frame are you modifying now...??
    fr.setSize(300, 200);
    fr.setVisible(true);
    fr.setDefaultCloseOperation(EXIT_ON_CLOSE);
    
    fr.setLayout(bl);
    
    fr.label = new JLabel("Label 1");
    fr.label2 = new JLabel("Label 2");
    fr.label3 = new JLabel("Label 2");
    fr.add(label, BorderLayout.NORTH);
    fr.add(label2, BorderLayout.SOUTH);
    fr.add(label3, BorderLayout.CENTER);
    

    实际上,只有在准备好显示初始化的UI时,才应该调用setVisible

    fr = new JFrame("BorderLayout");
    //...
    fr.setVisible(true);
    

    这样,您的UI将显示出来,而无需以某种方式revalidate