import java.awt.event.MouseListener
import java.util.Random
import javax.swing.JButton
import javax.swing.JFrame
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
import javax.swing.JPanel
import javax.swing.JTextField
/**
*
* @author 阿迪
*/
public class HOHO extends JFrame implements Runnable,MouseListener{
private JButton b
private Random r
private JTextField t
public HOHO() {
r = new Random()
JPanel p = new JPanel()
p.setLayout(null)
p.setSize(480,480)
b = new JButton("浮动按钮")
t = new JTextField()
b.setSize(100,30)
t.setSize(100, 30)
this.add(p)
p.add(b)
p.add(t)
this.setSize(480,480)
this.setVisible(true)
this.addMouseListener(this)
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
}
private void move() {
int x = r.nextInt(480)
int y = r.nextInt(480)
b.setLocation(x, y)
}
public void run() {
while(true) {
try{
Thread.sleep(1000)
move()
} catch(InterruptedException e){
e.printStackTrace()
}
}
}
public void mouseClicked(MouseEvent e) {
}
public void mousePressed(MouseEvent e) {
}
public void mouseReleased(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
t.setText("鼠标已离开按钮")
}
public void mouseExited(MouseEvent e) {
t.setText("鼠标已进入按钮")
}
public static void main(String[] args) {
new Thread(new HOHO()).start()
}
}
// 乱写的 凑活看吧...满足您的要求了.
法1:给父级div定义 高度代码如下:
<style type=”text/css”>
.div1{background:#000border:1px solid red/*解决代码*/height:200px}
.div2{background:#f00border:1px solid redheight:100pxmargin-top:10px}
.left{float:leftwidth:20%height:200pxbackground:#DDD}
.right{float:rightwidth:70%height:80pxbackground:#DDD}
</style>
<div class=”div1″>
<div class=”left”>我是左浮动</div>
<div class=”right”>我是右浮动</div>
</div>
<div class=”div2″>我是div2</div>
原理:给父级DIV定义固定高度(height),能解决父级DIV 无法获取高度得问题。
优点:代码简洁
缺点:高度被固定死了,是适合内容固定不变的模块。(不推荐使用)
方法2:DIV闭合处,加<div class=”clear”></div>(.clear{clear:both})
代码如下:
<div class=”div1″>
<div class=”left”>我是左浮动</div>
<div class=”right”>我是右浮动</div>
<div class=”clear”></div>
</div>
<div class=”div2″>我是div2</div>
原理:添加一对空的DIV标签,利用css的clear:both属性清除浮动,让父级DIV能够获取高度。
优点:浏览器支持好
缺点:多出了很多空的DIV标签,如果页面中浮动模块多的话,就会出现很多的空置DIV了,这样感觉视乎不是太令人满意。(不推荐使用)
方法3:结尾处加 br标签<br class=”clear”/>(.clear{clear:both})
代码如下:
<div class=”div1″>
<div class=”left”>我是左浮动</div>
<div class=”right”>我是右浮动</div>
<br class=”clear” />
</div>
<div class=”div2″>我是div2</div>
原理及有优缺点同方法2,可做了解,亦不推荐使用。
方法4:让父级div 也一并浮起来
这样做可以初步解决当前的浮动问题。但是也让父级浮动起来了,又会产生新的浮动问题。 不推荐使用
方法5:父级div定义 display:table
原理:将div属性强制变成表格
优点:不解
缺点:会产生新的未知问题。(不推荐使用)
方法6父元素设置 overflow:hidden;
<style type=”text/css”>
.div1{background:#000border:1px solid red/*解决代码*/overflow:hiddenzoom:1}
.div2{background:#f00border:1px solid redheight:100pxmargin-top:10px}
.left{float:leftwidth:20%height:200pxbackground:#DDD}
.right{float:rightwidth:70%height:80pxbackground:#DDD}
</style>
<div class=”div1″>
<div class=”left”>我是左浮动</div>
<div class=”right”>我是右浮动</div>
</div>
<div class=”div2″>我是div2</div>
原理:通过设置父元素overflow值设置为hidden;在IE6中还需要触发 hasLayout(zoom:1)
优点:代码简介,不存在结构和语义化问题
缺点:无法显示需要溢出的元素(亦不太推荐使用)
方法7父元素设置 overflow:auto;
原理:原理同方法6,在IE6中还需要触发 hasLayout(zoom:1)
优点:代码简介,不存在结构和语义化问题
缺点:firefox早期版本会无故产生focus,多个嵌套后,firefox某些情况会造成内容全选;IE中 mouseover 造成宽度改变时会出现最外层模块有滚动条等。
方法8:父级div定义 伪类:after 和 zoom
代码如下:
<style type=”text/css”>
.div1{background:#000border:1px solid red/*解决代码*/overflow:hiddenzoom:1}
.div2{background:#f00border:1px solid redheight:100pxmargin-top:10px}
.left{float:leftwidth:20%height:200pxbackground:#DDD}
.right{float:rightwidth:70%height:80pxbackground:#DDD}
.clearfix:after { content: “.”display: blockheight: 0clear: bothvisibility: hidden}
.clearfix {zoom:1}
</style>
<div class=”div1 clearfix”>
<div class=”left”>我是左浮动</div>
<div class=”right”>我是右浮动</div>
</div>
<div class=”div2″>我是div2</div>
原理:IE8以上和非IE浏览器才支持:after,原理和方法2有点类似,zoom(IE转有属性)可解决ie6,ie7浮动问题
优点:结构和语义化完全正确,代码量也适中,可重复利用率(建议定义公共类)
缺点:代码不是非常简洁(极力推荐使用)
本方法进益求精写法
相对于空标签闭合浮动的方法代码似乎还是有些冗余,通过查询发现Unicode字符里有一个“零宽度空格”,也就是U+200B,这个字符本身是不可见的,所以我们完全可以省略掉 visibility:hidden了
.clearfix:after {content:”\200B”display:blockheight:0clear:both}
.clearfix { *zoom:1} 照顾IE6,IE7就可以了
以int类型为例。10的浮动范围+-20%,那么就是8~12
-10的浮动范围+-20%,那么就是-12~-8
参考核心代码
public static int fun1(int x,double fd) {int y = (int) (Math.random() * (x + (x >= 0 ? 1 : -1)) * fd) * (Math.random() > 0.5 ? 1 : -1)
return x + y
}
完整的代码
public class Demo {public static void main(String[] args) {
double fd= 0.2//浮动的范围
int x = 10//需要浮动的数字
//int x = -10
for (int i = 0 i < 50 i++) {//循环50次,方便查看浮动的结果
System.out.println(fun1(x,fd))//调用方法一
//System.out.println(fun2(x,fd))//调用方法二
}
}
//方法一:写法比较简洁,不太好理解
public static int fun1(int x,double fd) {
int y = (int) (Math.random() * (x + (x >= 0 ? 1 : -1)) * fd) * (Math.random() > 0.5 ? 1 : -1)
return x + y
}
//方法二:写法比较啰嗦,但是好理解
public static int fun2(int x,double fd){
int y
int num
if(x>=0){
y = (int)(Math.random()*(x+1)*fd)
}else{
y = (int)(Math.random()*(x-1)*fd)
}
double z = Math.random()
if(z>0.5){
num = x+y
}else{
num = x-y
}
return num
}
}
运行输出
浮动后的值是:11浮动后的值是:10
浮动后的值是:12
浮动后的值是:10
浮动后的值是:10
浮动后的值是:8
....