public class Eg{
static void eg1(){
System.out.println("hello world!");
}
public static void main(String[] args) {
eg1();
}
}
public class Eg{
static void eg2(){
System.out.println("hello world!");
}
public static void main(String[] args) {
new Eg().eg2();
}
}
public class Eg{
void eg(){
System.out.println("hello world!");
}
Eg(){
eg();
}
}
需要先设置组件背景不透明(Opaque)
可借此实现透明窗体
label.setOpaque(false);
jPanel.setOpaque(false); //jPanel等组件使用setBackground(new Color(0,0,0,0)); 也可以实现,不过会出现重影
//jFrame.setBackground(new Color(0,0,0,0));这种设置可以使用到jFrame上
jFrame.remove(组件);
JFrame分好几层Pane(窗格),setBackground只能设置最底层的颜色,被上层的Pane盖住,所以看不到效果。
先用getContentPane()获取ContentPane,再设置背景色即可。
jFrame.getContentPane().setBackground(Color.YELLOW);
取消布局管理器
jFrame.setLayout(null);
//null可替换为new GridLayout(int rows, int Columns), GridLayout(网格式布局)按行列最大化组件
//取消布局管理后可添加jPanel等组件的位置,不过设置取消后一定要设置组件的位置和大小,要不然不会显示出来
@SuppressWarnings(“unused”)
对空的对象不做出警告
(SuppressWarnings: 抑制警告 , unused: 无用的)
public class Eg {
@SuppressWarnings("unused")
public static void main(String[] args) {
JFrame jFrame = new JFrames(“抑制警告”);
}
}
new ImageIcon("eg.png").getIconWidth() //宽
new ImageIcon("eg.png").getIconHeight() //高
jFrame.setExtendedState(MAXIMIZED_BOTH);
jFrame.setUndecorated(true);
jFrame.setAlwaysOnTop(true);
使用setLocationRelativeTo(null);
- Math.random()返回的是:返回带正号的 double 值,该值大于等于 0.0 且小于 1.0
(int)(Math.random()*m)+n //强制转换为int, 返回(n,m+n-1)之间的随机数。
2.new Random().nextInt();返回的是int型的范围的随机数
new Random().nextInt(n)+m; //返回(n,m+n-1)之间的随机数。
推荐理解
//按钮jButton
jButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
jFrame.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) { //鼠标按下事件
pressedPoint = e.getPoint(); //记录鼠标坐标
System.exit(0);
}
});
转载
jFrame.addComponentListener(new ComponentAdapter() {
public void componentResized(ComponentEvent e) {
System.out.println(jFrame.getSize()); //得到窗口大小
super.componentResized(e);
}
});
鼠标左右均可拖动
Point point; //Initial_coordinates初始坐标(全局变量)
jFrame.addMouseListener(new MouseAdapter() { //鼠标适配
public void mousePressed(MouseEvent e) {
point = e.getPoint(); //记录鼠标坐标
}
});
jFrame.addMouseMotionListener(new MouseMotionAdapter() { //鼠标移动适配
public void mouseDragged(MouseEvent e) {
jFrame.setLocation( jFrame.getLocation().x + e.getPoint().x - point.x,
jFrame.getLocation().y + e.getPoint().y - point.y);
}
});
鼠标右键拖动
music.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e){
if(e.getButton()==1){//检测鼠标左键单击(左键e.Button1=1,右键e.Button3=3)
new Thread(new Musics()).start();
}}});
music.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
if(e.getButton() == 3){//检测鼠标右键单击
point = e.getPoint();
}
}});
music.addMouseMotionListener(new MouseMotionAdapter() {
public void mouseDragged(MouseEvent e) {
if(e.isMetaDown()){//检测鼠标右键拖动
music.setLocation(music.getLocation().x + e.getPoint().x - point.x,
music.getLocation().y + e.getPoint().y - point.y);
}
}});
Java实现鼠标拖拽移动界面组件
DEFAULT_CURSOR =0
默认光标。
CROSSHAIR_CURSOR
十字光标。
E_RESIZE_CURSOR = 11
调整窗口右边框大小的光标。
HAND_CURSOR = 12
手状光标。
MOVE_CURSOR = 13
移动光标。
N_RESIZE_CURSOR = 8
调整窗口上边框大小的光标。
NE_RESIZE_CURSOR = 7
调整窗口右上角大小的光标。
NW_RESIZE_CURSOR = 6
调整窗口左上角大小的光标。
S_RESIZE_CURSOR = 9
调整窗口下边框大小的光标。
SE_RESIZE_CURSOR = 5
调整窗口右下角大小的光标。
SW_RESIZE_CURSOR = 4
调整窗口左下角大小的光标。
TEXT_CURSOR = 2
文字光标类型。
W_RESIZE_CURSOR = 10
调整窗口左边框大小的光标类型。
WAIT_CURSOR = 3
等待光标类型。
jFrame.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR )); //使用系统光标
setCursor(Toolkit.getDefaultToolkit().createCustomCursor(icon.getImage(), new Point(10, 10), "norm")); //系统默认工具包下创建自定义图片光标
//图片光标变化
addMouseListener(new MouseAdapter() {
public void mouseEntered(MouseEvent e) {
setCursor(Toolkit.getDefaultToolkit().createCustomCursor(eg.getImage(), new Point(0, 0), "kaishi"));
}
});
package eg;
public class Eg {
public static void main(String[] args)
{
int sum = 0;
int option = JOptionPane.YES_OPTION;
while(option == JOptionPane.YES_OPTION)
{
String dataString = JOptionPane.showInputDialog("Enter an int value:");
int data = Integer.parseInt(dataString);
sum+=data;
option = JOptionPane.showConfirmDialog(null, "Continue?");
JOptionPane.showMessageDialog(null,"the sum is"+ sum);
}
}
}
按取消之后不会直接退出(添加stop=true;可做到游戏画面静止)
添加监听窗口事件的方法addWindowListener,将WindowAdapter的对象传给这个方法,然后在匿名类中重写了windowClosing的方法,接着在方法里面显示了确认的对话框,对确认按钮进行监听,并实现退出。
关键使用jFrame.setDefaultCloseOperation(0)(不要用jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)关闭)
在点击确定后使用System.exit(0);退出
详见
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class test implements ActionListener{
int width = 400, height = 400;
boolean stop = false; ImageIcon img;
JLabel label = new JLabel();
JDialog jDialog = new JDialog();
//加载图片
ImageIcon up = new ImageIcon("up.png");
ImageIcon down = new ImageIcon("down.png");
ImageIcon left = new ImageIcon("left.png");
ImageIcon right = new ImageIcon("right.png");
void tests() {
new Timer(15, this).start();
jDialog.setLayout(null); //仅关闭按钮的jDialog窗体
jDialog.setVisible(true);
jDialog.setTitle("GiF");
jDialog.setBounds(Toolkit.getDefaultToolkit().getSscreenSize().width/2-width/2, Toolkit.getDefaultToolkit().getScreenSize().height/2-height/2, width, height);
jDialog.add(label);
// 以下是关键
jDialog.setDefaultCloseOperation(0);
jDialog.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e) {
stop=true;
int result = JOptionPane.showConfirmDialog(jDialog,"是否退出","警告",JOptionPane.YES_NO_OPTION); //弹出语句(输出,输出类继承对象使用Eg.this)
if(result==JOptionPane.OK_OPTION){System.exit(0);} //使用jDialog.dispose()并不能关闭进程
else{stop=false;}
}
});
// 以上是关键
}
public static void main(String[] args) {
new test().tests();
}
public void actionPerformed(ActionEvent e) {
int t=0, x=10, y=4,
if(!stop){
t++; x++;
label.setIcon(img);
if(t%4==0){img=up;}
else if(t%4==1){img=right;}
else if(t%4==2){img=down;}
else img=left;
label.setBounds(x, y, img.getIconWidth(), img.getIconHeight());
}
}
}
try {new Thread();Thread.sleep(150);}
catch (InterruptedException e) {e.printStackTrace();}
import java.awt.*;
import javax.swing.JFrame;
public class Eg extends JFrame{
Eg(){
setBounds(0, 0, 800, 800);
setVisible(true);
setDefaultCloseOperation(3);
}
public void paint(Graphics g){
g.fillRect(0, 0, 800, 800);
g.setColor(Color.red);
for (int i = 0; i <100; i++) {
g.drawLine(i*10+40, 40, i*10+40, 800);
try {new Thread();Thread.sleep(15);}
catch (InterruptedException e) {e.printStackTrace();}
g.drawLine(40, i*10+40, 800, i*10+40);
try {new Thread();Thread.sleep(150);}
catch (InterruptedException e) {e.printStackTrace();}
}
}
public static void main(String[] args) {
new Eg().repaint();}
}
匿名内部线程改变背景颜色
new Thread(new Runnable() {
int x=0,y=0,z=0,w=0;
public void run() {
while(true){
try {
new Thread();
Thread.sleep(150);
x++;y+=1;z+=2;w+=3;
jFrame.setBackground(new Color(x%255,y%255,z%255,w%255));
} catch (Exception e) {}
}
}
}).start();
以下是在eclipse中进行的项目中添加jar方法,如果你的是IDE或其他编译器,自行百度:编译器名称+添加jar的方法
如果出现其它不能添加的问题,自行百度:编译器名称+添加jar的方法
如果Add External JARS 不能点击,就先点击下 JRE System Library [JacaSE - x.x] 让其显示出来
有的eclipse会有module path 和 class path 两种路径,如果出现的话就选择class path 添加
package eg;
import java.io.*;
import javax.swing.*;
import java.awt.FileDialog;
import javazoom.jl.player.Player; //引用添加的jar包
public class MP3Player extends Eg{
String MP3Players() { //跳出文件选择器,选择文件后将路径返回
FileDialog fd = new FileDialog(this,"Chooes music", FileDialog.LOAD);
fd.setVisible(true);
return fd.getDirectory() +fd.getFile();
}
public void play(String filename) {
try {
BufferedInputStream buffer = new BufferedInputStream(
new FileInputStream(filename));
Player player = new Player(buffer);
player.play();
} catch (Exception e) {
System.out.println(e);
}
}
public static void main(String[] args) {
new MP3Player().play(new MP3Player().MP3Players());
}
}
源码地址
定义变量name(如:int name;)
先强制转换为object(目标格式)
naem.getClass() 获取变量类型
name.tostring() 变量类型转换为字符串格式
name.toURL() 变量类型转换为文件格式
System.out.println((Object)name.getClass());
源码地址1
源码地址2
package eg;
public class Eg {
public static void main(String[] args) throws Exception {
//方式一:使用Runtime的exec方法
Runtime.getRuntime().exec("C:\\Windows\\system32\\mspaint.exe"); //打开画图(路径之间使用了双斜杠)
//方式二:使用ProcessBuilder类中的start方法
new ProcessBuilder("C:/Windows/system32/notepad.exe").start(); //打开记事本(路径之间使用了反斜杠)
}
}
假定无框窗体width = 600,height = 300,图片像素60*30,图片坐标为(x,y)
如果让图片移动到边界自动穿过(类似贪吃蛇可穿墙游戏),那么对图片而言则有以下设置:
if( x<0 ) x=width-60; //图片是在坐标的右下角,所以当达到有边界时需要减去图片的width
if( x>width-60 ) x=0;
if( y<0 ) y=height-30; //当达到下边界时需要减去图片的height
if( y>height-30 ) y=0;
转载
package eg;
import java.awt.*;
import java.awt.image.*;
import java.awt.geom.AffineTransform;
import javax.swing.*;
//图像旋转演示
public class Eg extends JFrame{
private static final long serialVersionUID = 1L;
int t;
Image image;
Graphics2D bufImageG; //缓冲区图像的图形环境
ImagePane imagePane=new ImagePane();
BufferedImage bufImage,originalBufImage; //用于显示的缓冲区图像
public Eg(){
image = new ImageIcon("picture/snake/begin.png").getImage();
add(imagePane); //增加组件到容器上
setSize(200, 200); //设置窗口尺寸
setLocationRelativeTo(null);
setVisible(true); //设置窗口可视
setDefaultCloseOperation(3); //关闭窗口时退出程序
}
public static void main(String[] args){
new Eg();
}
class ImagePane extends JPanel {
private static final long serialVersionUID = 1L;
public void loadImage(int t) {
image = new ImageIcon("eg.png").getImage();
originalBufImage = new BufferedImage(image.getWidth(this),image.getHeight(this),2); //创建原始缓冲区图像
originalBufImage.createGraphics().drawImage(image, 0, 0, this); //传输源图像数据到缓冲区图像中
BufferedImage filteredBufImage =new BufferedImage(image.getWidth(this),image.getHeight(this),2); //过滤后的图像
AffineTransform transform = new AffineTransform(); //仿射变换对象
transform.rotate(Math.toRadians(t++%360),75,75); //旋转图像
new AffineTransformOp(transform, null).filter(originalBufImage, filteredBufImage);//过滤图像,目标图像在filteredBufImage
bufImage = filteredBufImage; //让用于显示的缓冲区图像指向过滤后的图像
}
public void paint(Graphics g){
repaint();
loadImage(t);
super.paint(g);
Graphics2D g2 = (Graphics2D) g;
g2.drawImage(bufImage,0,0,this); //绘制图片
try {t++;new Thread();Thread.sleep(15);} catch (Exception e) {}
}
}
}
//添加到paint方法内
douel angel+=0.1; //设置旋转角
Graphics2D graphics2d = (Graphics2D) g;
graphics2d.rotate(Math.toRadians(angel),500,500); //实现旋转,将数值角转化为角度值,旋转中心坐标
swing下的Timer(计时器)需要添加 ActionListener接口实现public void actionPerformed(ActionEvent e) {}方法,表述形式为 Timer timer = new Timer(delay, listener);其优点时可以通过delay控制方法内的刷新帧率,使用start开启计时
paint中的repaint方法也可做到刷新帧率的作用,其作用域仅局限于paint方法内及其调用对象
(闪烁问题的解决)
System计时
System.currentTimeMillis(); //精确到毫秒>> 1s=1000ms
System.nanoTime(); //精确到纳秒>>> 1s=1000 000 000 ns
使用util 下的Timer类
m的n次方
//毫秒计时
long begintime = System.currentTimeMillis(); //初始时间
long endtinme=System.currentTimeMillis(); //结束时间
long costTime = (endtime - begintime); //间隔时间(costTime / 1000 变成秒)
//纳秒计时
long begintime = System.nanoTime(); //初始时间
long endtime = System.nanoTime(); //结束时间
long costTime = (endtime - begintime); //间隔时间(costTime / 1000 变成微秒;costTime / Math.pow(10,6) 变成微秒;costTime / Math.pow(10,9) 变成秒)
package eg;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
public class Eg{
/**
* @显示当前时间
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//获得系统的时间,单位为毫秒,转换为妙
long totalMilliSeconds = System.currentTimeMillis();
DateFormat dateFormatterChina = DateFormat.getDateTimeInstance(DateFormat.MEDIUM,DateFormat.MEDIUM);//格式化输出
TimeZone timeZoneChina = TimeZone.getTimeZone("Asia/Shanghai");//获取时区 这句加上,很关键。
dateFormatterChina.setTimeZone(timeZoneChina);//设置系统时区
long totalSeconds = totalMilliSeconds / 1000;
System.out.println(totalSeconds/3600/24/365); //与1970年年相差的年份
//求出现在的秒
long currentSecond = totalSeconds % 60;
//求出现在的分
long totalMinutes = totalSeconds / 60;
long currentMinute = totalMinutes % 60;
//求出现在的小时
long totalHour = totalMinutes / 60;
long currentHour = totalHour % 24;
//显示时间
System.out.println("总毫秒为: " + totalMilliSeconds);
System.out.println(currentHour + ":" + currentMinute + ":" + currentSecond + " GMT");
Date nowTime = new Date(System.currentTimeMillis());
System.out.println(System.currentTimeMillis());
SimpleDateFormat sdFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:dd");
String retStrFormatNowDate = sdFormatter.format(nowTime);
System.out.println(retStrFormatNowDate);
}
}
//util 下的Timer具有定时功能
package eg;
import java.util.*;
public class Eg{
Timer timer = new Timer();
Eg(){
timer.schedule(new TimerTask() { //新建定时任务,设定工作,间隔时间执行工作
public void run() {
System.out.println("learn...");
new Eg(); //实现了重复性
timer.cancel();
}
}, 3000);
}
public static void main(String[] args) {
new Eg();}
}
//输入
try{
FileWriter fw = new FileWriter(new File("Text/snake.txt"));
fw.write(sx+"\r\n");
fw.write(sy+"\r\n");
fw.close();
}catch(Throwable e){}
//输出
try {
fs = new BufferedReader(new FileReader("Text/snake.txt"));
String read;
while ((read = fs.readLine()) != null) {
System.out.println(read);
}} catch (IOException e) {}}
//选取开头值
try {
bufferedReader = new BufferedReader(new FileReader("Text/snake0.txt"));
while ((string= bufferedReader.readLine()) != null) {
string0= string; //当改行有内容才输出,bufferedReader.readLine()本身不具备判断效应,若在大括号内输入string= bufferedReader.readLine()),则max是空值
}} catch (IOException e) {}
if(len-2>Integer.valueOf(smax)){
try {
FileWriter writer = new FileWriter(new File("Text/snake0.txt"));
writer.write(String.valueOf(len-2));
writer.close();
} catch (IOException g) {}}}
//以内部类方式导入
JColorChooser chooser = new JColorChooser(new DefaultColorSelectionModel()); //颜色选择窗格
class Colorchoose extends JFrame {
/**
*
*/
private static final long serialVersionUID = 1L;
Colorchoose() {
setAlwaysOnTop(true);
setTitle("颜色选择");
setBounds(0, 0, 300, 300);
setVisible(true);
add(chooser);
//chooser.getColor();得到选择颜色
chooser. setColor(); //设置颜色
}
}