java中layout是什么意思

Python011

java中layout是什么意思,第1张

layout

n.布局,安排,设计布置图,规划图

[英][ˈleɪaʊt][美][ˈleˌaʊt]

You've got the layout of the whole land.

你已经对整座城市的布局了如指掌

你的JPanel可以用BorderLayout啊

上面的文本域,可以被JScrollPane包裹啊,

然后这个pane就加到BorderLayout.CENTER

下面的按钮就加到BorderLayout.SOUTH

这样就刚刚好了,用布局要看情况来选择合适的布局。

还是跟你写好了吧,说都白说了

import java.awt.BorderLayout

import java.awt.FlowLayout

import javax.swing.JButton

import javax.swing.JFrame

import javax.swing.JPanel

import javax.swing.JScrollPane

import javax.swing.JTextArea

public class JButtonTest extends JFrame

{

private static final long serialVersionUID = 1L

public JButtonTest ()

{

setTitle ("tester")

setSize (300, 300)

setLayout (new BorderLayout ())

setLocationRelativeTo (null)

setResizable (false)

setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE)

}

private void addComponents ()

{

JTextArea area = new JTextArea ()

JScrollPane scrollPane = new JScrollPane (area)

JButton button = new JButton ("图书推荐")

add (scrollPane, BorderLayout.CENTER)

JPanel panel = new JPanel (new FlowLayout (FlowLayout.CENTER))

panel.add (button)

add (panel, BorderLayout.SOUTH)

}

public static void main ( String[] args )

{

JButtonTest tester = new JButtonTest ()

tester.addComponents ()

tester.setVisible (true)

}

}

简单说来就是映射。

你可以看到一个正常的android工程下面有个gen文件夹,其中有个包名.R.java,就类似于map的key-value,R.java中就是存放了一个个key值,比如R.drawable.a就对应了res/drawable/a.png文件,那么我们通过此key就可以获得此图片文件的路径,通过加载图片的方法加载为图片,当然有人有疑惑为什么不加载res/drawable-hdpi/a.png,这个是框架层或者底层读取机器的属性(比如分辨率、密度信息)分辨出究竟加载哪个文件夹下面的文件。

因为同属于一个包,有规范的文件夹命名方式,如果你将values文件夹换成valuess,那么就会报错,这个就规定了路径是写死的,所以我们就可以通过id获取写死的路径下面的文件加载。

对于AndroidManifest.xml中加载res中的资源的原理,跟src中的.java如何加载res中的文件是一个意思。

但是AndroidManifest.xml如何加载src中的.java,看图片,这是一个apk中包含的文件,classes.dex是所有.java文件编译过后组合的一个class文件集合,包括R.java编译过后的class文件,resources.arsc中放的是匹配信息,就相当于map信息,哪个key(就是id)对应哪个value。

程序启动的时候,先读取AndroidManifest.xml文件,知道包名,那么此程序的路径就无所遁形,AndroidManifest.xml中有些R.drawable.icon的id,它是先读取classes.dex中的R class文件,然后根据匹配表resources.arsc知道目标文件是在哪儿,那么就可以加载了。 当然classes.dex中某个控件也想加载资源,那么方式是一样的。