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

时间:2014-07-07 04:37:40

标签: java swing layout-manager border-layout flowlayout

我创建了两个方法,参数1为BorderLayout,其他方法为FlowLayout,每个方法都有自己的框架。

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

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 个答案:

答案 0 :(得分: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实例的属性。

首先从extends JFrame删除BLayOut,这会让问题混乱,这将生成无法找到方法的编译器错误列表。这些可以使用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);

这样,您的用户界面就会显示出来,而无需以某种方式revalidate框架......