Swing
1、窗口,面板
Swing中用的是JFrame,是Frame的子类
package zhang.com.demo24;
import javax.swing.*;
import java.awt.*;
public class JFrameDemo {
//初始化
public void init(){
//顶级窗口
JFrame jframe = new JFrame("这是第一个JFrame窗口");
jframe.setVisible(true);
jframe.setBounds(100,100,200,200);
jframe.setBackground(Color.blue);
//设置文字 并且居中
JLabel jLabel = new JLabel("Hello World!",SwingConstants.CENTER);
jframe.add(jLabel);
//关闭窗口
jframe.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
//主方法,建立窗口
new JFrameDemo().init();
}
}
这个里面的方法与Frame大多类似,但是还有一些他自带的方法,比如说关闭窗口。就可以直接调用方法来关,但是Frame中就要用事件来关闭。调用Window适配器来进行关闭
package zhang.com.demo1;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class Colse {
public Colse(Frame frame) {
frame.addWindowListener(new WindowAdapter() {
@Override public void windowClosing(WindowEvent e) {System.exit(0);}});
}
}
//Jframe
jframe.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
2、弹窗
JDialog,用来被弹出,默认就有关闭事件
package zhang.com.demo24;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class DialogDemo extends JFrame {
public DialogDemo() {
this.setBounds(200,200,400,300);
this.setVisible(true);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
//JFrame 放东西,容器
Container container = this.getContentPane();
//绝对布局,不会被拖动
container.setLayout(null);
JButton button = new JButton("点击弹出一个对话框");
button.setBounds(50,50,100,50);
container.add(button);
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new MyDialogDemo2();
}
});
}
public static void main(String[] args) {
new DialogDemo();
}
}
class MyDialogDemo2 extends JDialog{
public MyDialogDemo2(){
this.setVisible(true);
this.setBounds(100,100,500,500);
Container contentPane = this.getContentPane();
contentPane.setLayout(null);
contentPane.add(new Label("Hello,World!"));
}
}
3、标签
package zhang.com.demo24;
import javax.swing.*;
import java.awt.*;
public class MyTestLabel extends JFrame implements Icon{
private int width;
private int heigh;
public MyTestLabel(){
}
public MyTestLabel(int width,int heigh){
this.width=width;
this.heigh=heigh;
}
public void init(){
MyTestLabel myTestLabel = new MyTestLabel(15,15);
//图标放在标签,也可以放在按钮上!
JLabel icontest = new JLabel("Icontest", myTestLabel, SwingConstants.CENTER);
Container contentPane = getContentPane();
contentPane.add(icontest);
this.setVisible(true);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
@Override
public void paintIcon(Component c, Graphics g, int x, int y) {
g.fillOval(x,y,width,heigh);
}
@Override
public int getIconWidth() {
return this.width;
}
@Override
public int getIconHeight() {
return this.heigh;
}
public static void main(String[] args) {
new MyTestLabel().init();
}
}
运行出来结果是:
4、面板
面板和Frema一样在前面加一个J即可。即为JPanel。
package zhang.com.demo24;
import javax.swing.*;
import java.awt.*;
public class MyjPanelDemo extends JFrame {
public static void main(String[] args) {
new MyjPanelDemo();
}
public MyjPanelDemo() {
Container container = this.getContentPane();
//后面参数的意思,间距
container.setLayout(new GridLayout(2, 1, 10, 10));
JPanel panel1 = new JPanel(new GridLayout(1, 3));
JPanel panel2 = new JPanel(new GridLayout(1, 2));
JPanel panel3 = new JPanel(new GridLayout(2, 1));
JPanel panel4 = new JPanel(new GridLayout(3, 2));
panel1.add(new JButton("1"));
panel1.add(new JButton("1"));
panel1.add(new JButton("1"));
panel2.add(new JButton("2"));
panel2.add(new JButton("2"));
panel3.add(new JButton("3"));
panel3.add(new JButton("3"));
panel4.add(new JButton("4"));
panel4.add(new JButton("4"));
panel4.add(new JButton("4"));
panel4.add(new JButton("4"));
panel4.add(new JButton("4"));
panel4.add(new JButton("4"));
container.add(panel1);
container.add(panel2);
container.add(panel3);
container.add(panel4);
this.setVisible(true);
this.setSize(500, 500);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
}