JFrame
JFrame是java图形界面中的一个顶级容器,只有它这个窗体上才有最大/小化、关闭按钮,其他的容器都是没有的,作为顶级容器它可以使用其他容器的方法,但是其他容器不可以使用顶级容器的方法。还是用代码来解释窗体及使用窗体时一般会用到的一些方法吧。
public class JFrameDisplay {
public static void main(String[] args) {
JFrameDisplay display=new JFrameDisplay();
display.UI();
}
public void UI() {
// JFrame frame=new JFrame("界面演示");
//设置窗体的标题,这一行代码与下面两行代码的效果是一样的
JFrame frame =new JFrame();
frame.setTitle("界面演示");
frame.setSize(1000,1000);
//设置窗体打开时的大小,这一行代码与下面两行代码的效果是一样的
// Dimension dim=new Dimension(1000,1000);
//设置1000*1000(宽*高)一个尺寸
// frame.setSize(dim);
frame.setResizable(false);
//设置窗体是否可改变大小,没有设置时默认为true
frame.setLocationRelativeTo(null);
//设置窗体打开时的位置
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//设置点击窗体的关闭按钮时,窗体作出的反应
frame.setVisible(true);
//设置窗体可见
//如果这个类继承了JFrame类的话,那么也可以不实例化对象,
//将上述代码中frame.setTile("界面演示");
//这样的代码中的frame替换成this就OK了
}
}
布局器
JFrame窗体中大体上有FlowLayout、BorderLayout、GridLayout、CardLayout、GridBagLayout这几种布局器,其中边框布局器BorderLayout是JFrame的默认布局器。在这里我只用代码来解释我常用的流式布局器FlowLayout布局器好了。
使用布局器的原因
我们在上面代码的最后加上这样一段代码,我们会发现用dim1设置按钮的大小没有效果,如果再在这个按钮后再写一段代码添加一个新的按钮那么前面写的这个按钮将会看不到。这是JFrame默认的布局器边框布局器BorderLayout所导致的,当然也可以通过设置边框布局器BorderLayout来设置布局,不过它只能设置东西南北中,那么这里我们就使用流式布局器FlowLayout来改善这个问题。
JButton btn=new JButton("btn1");
Dimension dim1=new Dimension(10,10);
btn.setPreferredSize(dim1);
frame.add(btn);
FlowLayout
当我们将上面的代码加上流式布局器FlowLayout显示的效果就基本大大都我们所设想的效果了。
FlowLayout f=new FlowLayout();
//实例化流式布局器对象
frame.setLayout(f);
//设置窗体的布局
JButton btn1=new JButton("btn1");
Dimension dim1=new Dimension(100,20);
btn1.setPreferredSize(dim1);
frame.add(btn1);
其他容器及组件的介绍
JTextField文本框
这里我想说的问题就是窗体的可见,即frame.setVisible(true);还是写在图形界面代码的最后一行比较稳妥,不然有时可能你添加的组件不能在界面上显示出来。我在上面刚开始演示的时候,因为还没有在界面上添加内容,所以不能感觉到这个问题,但是当我尝试开始在界面添加内容时,一开始并不能显示出来,直到我将frame.setVisible(true);这行代码写到最后一行,才正常显示了出来。
因为类似JTexField组件的组件要加入窗体的写法是差不多的,我就偷个懒,在下面再写一个稍微综合一点的界面,就不在这里放太多类似看起来有点重复的代码啦,更加重要的还是各位小伙伴要自己动手去多打代码,就能熟悉他们啦。
FlowLayout f=new FlowLayout();
//实例化流式布局器对象
frame.setLayout(f);
//设置窗体的布局
Dimension dim1=new Dimension(200,40);
JTextField jt=new JTextField("111");
jt.setPreferredSize(dim1);
frame.add(jt);
frame.setVisible(true);
//设置窗体可见
综合界面
public class ExerciseDraw {
public static void main(String []args) {
ExerciseDraw draw=new ExerciseDraw();
draw.drawUI();
}
public void drawUI() {
JFrame jf=new JFrame("Exercise Draw");
jf.setSize(1000,1000);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JMenuBar bar=new JMenuBar();
//菜单条
JMenu menu=new JMenu("First");
bar.add(menu);
//将菜单添加到菜单条
//菜单
JMenu menu1=new JMenu("Second");
//菜单
bar.add(menu1);
//将菜单添加到菜单条
JMenuItem item=new JMenuItem("111");
//菜单项
menu.add(item);
//将菜单项添加到菜单
jf.setJMenuBar(bar);
//将菜单条添加到窗体
JPanel p1=new JPanel();
//面板
p1.setBackground(Color.black);
p1.setPreferredSize(new Dimension(0,80));
for(int i=0;i<10;i++)
{
JButton btn=new JButton("test"+i);
p1.add(btn);
}
JPanel p2=new JPanel();
p2.setPreferredSize(new Dimension(0,80));
p2.setBackground(Color.cyan);
Random random=new Random();
for(int i=0;i<10;i++)
{
JButton btn=new JButton("test"+i);
btn.setBackground(new Color(random.nextInt(256),random.nextInt(256),random.nextInt(256)));
p2.add(btn);
}
JPanel p3=new JPanel();
p3.setBackground(Color.orange);
p3.setLayout(null);
JButton btn=new JButton("自定义位置");
btn.setBounds(100,100,100,100);
//设置按钮的位置
p3.add(btn);
jf.add(p3,BorderLayout.CENTER);
JTabbedPane tab=new JTabbedPane();
//选项卡
tab.add(p1,"普通");
tab.add(p2,"颜色");
//将两个面板都添加到选项卡上
jf.add(tab,BorderLayout.NORTH);
jf.setVisible(true);
}
}