java-day39-GUI
文章目錄
GUI案例
計算器
package com.zzb.day39;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class MyFirstGUI extends JFrame implements ActionListener{
private static final long serialVersionUID = 1L;
private JPanel northPanel,centerPanel;
private JTextField f1,f2,f3;
private JLabel label1,label2;
private JButton btn;
private JScrollPane scrollPane;
private JTextArea textArea;
// 當前f1中的值
private int v1;
// 當前f2中的值
private int v2;
public MyFirstGUI() {
setTitle("my-first-GUI");
setBounds(300, 300, 500, 500);
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.initComponent();
setVisible(true);
}
private void initComponent() {
northPanel = new JPanel();
centerPanel = new JPanel();
f1 = new JTextField(5);
f2 = new JTextField(5);
f3 = new JTextField(5);
f1.setEnabled(false);
f2.setEnabled(false);
v1 = getNum();
v2 = getNum();
f1.setText(v1+"");
f2.setText(v2+"");
label1 = new JLabel("+");
label2 = new JLabel("=");
btn = new JButton("查看結果");
textArea = new JTextArea();
scrollPane = new JScrollPane(textArea);
textArea.setEnabled(false);
// 設置需要的佈局管理器
centerPanel.setLayout(new BorderLayout());
// 依次把組件添加到相應的容器中
northPanel.add(f1);
northPanel.add(label1);
northPanel.add(f2);
northPanel.add(label2);
northPanel.add(f3);
northPanel.add(btn);
centerPanel.add(scrollPane);
super.add(northPanel,BorderLayout.NORTH);
super.add(centerPanel);
//給組件添加事件監聽器
btn.addActionListener(this);
}
private int getNum(int max) {
int num = (int)(Math.random()*max)+1;
return num;
}
private int getNum() {
return this.getNum(100);
}
@Override
public void actionPerformed(ActionEvent e) {
int v3 = 0;
try {
v3 = Integer.parseInt(f3.getText());
} catch (NumberFormatException e1) {
//System.out.println("輸入的結果必須是數字!!");
textArea.append("輸入的結果必須是數字!!\n");
f3.setText("");
f3.requestFocus();
return;
}
String str = null;
if((v1+v2)==v3) {
//答案正確
str = "回答正確! "+v1+"+"+v2+"="+v3+"\n";
v1 = getNum();
v2 = getNum();
f1.setText(v1+"");
f2.setText(v2+"");
}else {
//答案錯誤
str = "回答錯誤! "+v1+"+"+v2+"="+v3+", 正確答案爲 "+v1+"+"+v2+"="+(v1+v2)+"\n";
}
textArea.append(str);
f3.setText("");
f3.requestFocus();
}
public static void main(String[] args) {
new MyFirstGUI();
}
}
文本框和密碼
package com.zzb.day39;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
/**
* 文本框 密碼框
*/
public class JTextFieldTest {
public static void main(String[] args) {
// 容器
JFrame frame = new JFrame();
JPanel panel = new JPanel();
// 組件
JTextField field = new JTextField(10);
JPasswordField passwordField = new JPasswordField(10);
// 設置容器基本屬性
frame.setBounds(300, 300, 500, 500);
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
java
// 把組件依次放到容器中
panel.add(field);
panel.add(passwordField);
frame.add(panel);
// 設置主容器的可見性
frame.setVisible(true);
}
}
文本域 滾動面板
package com.zzb.day39;
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
/**
* 文本域 滾動面板
*/
public class JScrollPaneTest {
public static void main(String[] args) {
// 容器
JFrame frame = new JFrame();
JPanel panel = new JPanel();
// 組件
JTextArea area = new JTextArea();
area.setSize(100, 100);
JScrollPane scrollPane = new JScrollPane(area);
// 設置容器基本屬性
frame.setBounds(300, 300, 500, 500);
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 把組件依次放到容器中
panel.setLayout(new BorderLayout());//改變panel中的佈局管理器
panel.add(scrollPane);
frame.add(panel);
// 設置主容器的可見性
frame.setVisible(true);
}
}
菜單欄 菜單 菜單項
package com.zzb.day39;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
/**
* 菜單欄 菜單 菜單項
*/
public class JScrollBarTest {
public static void main(String[] args) {
// 容器
JFrame frame = new JFrame();
JPanel panel = new JPanel();
// 組件
JMenuBar bar = new JMenuBar();
JMenu menu1 = new JMenu("系統");
JMenu menu2 = new JMenu("工具");
JMenuItem item1,item2,item3;
item1 = new JMenuItem("啓動");
item2 = new JMenuItem("暫停");
item3 = new JMenuItem("關閉");
menu1.add(item1);
menu1.addSeparator();
menu1.add(item2);
menu1.addSeparator();
menu1.add(item3);
JMenuItem item4,item5,item6;
item4 = new JMenuItem("截圖");
item5 = new JMenuItem("刷新");
item6 = new JMenuItem("複製");
menu2.add(item4);
menu2.addSeparator();
menu2.add(item5);
menu2.addSeparator();
menu2.add(item6);
bar.add(menu1);
bar.add(menu2);
// 設置容器基本屬性
frame.setBounds(300, 300, 500, 500);
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 把組件依次放到容器中
panel.add(bar);
frame.add(panel);
// 設置主容器的可見性
frame.setVisible(true);
}
}
進度條
package com.zzb.day39;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
/**
* 進度條
*/
public class JProgressBarTest {
public static void main(String[] args) {
// 容器
JFrame frame = new JFrame();
JPanel panel = new JPanel();
// 組件
JProgressBar bar = new JProgressBar();
bar.setMinimum(0);
bar.setMaximum(100);
//設置進度條的初始值
bar.setValue(20);
//顯示當前進度條的狀態
bar.setStringPainted(true);
JButton btn = new JButton("下載");
// 設置容器基本屬性
frame.setBounds(300, 300, 500, 500);
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 把組件依次放到容器中
panel.add(bar);
panel.add(btn);
frame.add(panel);
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int value = bar.getValue();
if(value == 100) {
System.out.println("已經下載完畢!!");
return;
}
value = value + (int)(Math.random()*10);
value = value >= 100? 100:value;
bar.setValue(value);
}
});
// 設置主容器的可見性
frame.setVisible(true);
}
}
數據列表JList,可以單選也可以多選
package com.zzb.day39;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
/**
* 數據列表JList,可以單選也可以多選
*/
public class JListTest {
public static void main(String[] args) {
// 容器
JFrame frame = new JFrame();
JPanel panel = new JPanel();
// 組件
String[] arr = {"列表1","列表2","列表3","列表4","列表5"};
JList<String> list = new JList<>(arr);
// 設置容器基本屬性
frame.setBounds(300, 300, 500, 500);
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 把組件依次放到容器中
panel.add(list);
frame.add(panel);
// 設置主容器的可見性
frame.setVisible(true);
}
}
對話框
package com.zzb.day39;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JPanel;
/**
* 對話框
*/
public class JDialogTest {
public static void main(String[] args) {
// 容器
JFrame frame = new JFrame();
JPanel panel = new JPanel();
// 組件
JButton btn = new JButton("OK");
//參數1 對話框屬於哪個窗口
//參數2 對話框的標題
//參數3 對話框的模式
JDialog dialog = new JDialog(frame,"對話框",true);
dialog.setBounds(400, 400, 300, 300);
dialog.setLayout(new FlowLayout());//設置對話框的佈局管理器
dialog.add(btn);//把按鈕放到對話框中
// dialog.setVisible(true);
// 設置容器基本屬性
frame.setBounds(300, 300, 500, 500);
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 把組件依次放到容器中
JButton show = new JButton("顯示對話框");
panel.add(show);
frame.add(panel);
// show.addActionListener(new ActionListener() {
// @Override
// javapublic void actionPerformed(ActionEvent e) {
// dialog.setVisible(true);
// }
// });
//給按鈕show添加事件處理,用戶一點擊按鈕,就調指定代碼
show.addActionListener( e -> dialog.setVisible(true) );
// 設置主容器的可見性
frame.setVisible(true);
}
}
畫布
package com.zzb.day39;
import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
/**
* 畫布
*/
public class CanvasTest {
private static int x1;//記錄上一次拖拽時候的座標
private static int y1;//記錄上一次拖拽時候的座標
private static int x2;//記錄本次 拖拽時候的座標
private static int y2;//記錄本次 拖拽時候的座標
public static void main(String[] args) {
// 容器
JFrame frame = new JFrame();
JPanel panel = new JPanel();
// 組件
Canvas canvas = new Canvas() {
private static final long serialVersionUID = 1L;
@Override
public void paint(Graphics g) {
g.drawLine(0, 0, panel.getWidth(), panel.getHeight());
}
};
// 設置容器基本屬性
frame.setBounds(300, 300, 500, 500);
frame.setResizable(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 把組件依次放到容器中
panel.setLayout(new BorderLayout());//設置panel的佈局管理器
panel.add(canvas);
frame.add(panel);
// 給畫布添加事件監聽器,監聽鼠標在畫布中拖拽的操作
// 鼠標一旦除非這個拖拽操作,監聽器就會捕獲這個事件對象e
// 並且調用指定方法,進行事件處理
// MouseMotionListener只能監聽鼠標拖拽和移動
canvas.addMouseMotionListener(new MouseAdapter() {
private Graphics g;
@Override
public void mouseDragged(MouseEvent e) {
// 獲取鼠標當前觸發事件的時候所在位置的座標
// x1 y1 保存上一次的座標
x1 = x2;
y1 = y2;
//x2 y2 一直都是當前的最新座標
x2 = e.getX();
y2 = e.getY();
//System.out.println("當前鼠標拖拽時的座標:("+x+","+y+")");
if(g == null) {
g = canvas.getGraphics();
}
g.setColor(Color.RED);
//g.fillOval(x, y, 10, 10);
g.drawLine(x1, y1, x2, y2);
}
});
// MouseListener可以監聽鼠標的按下去事件
canvas.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
//鼠標按下之後,獲取當前的初始座標,默認初始座標(x1,y1) 和 (x2,y2) 相同
x1 = x2 = e.getX();
y1 = y2 = e.getY();
}
});
// 設置主容器的可見性
frame.setVisible(true);
}
}
網格佈局管理器
package com.zzb.day39;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
/**
* 網格佈局管理器
*/
public class GridLayoutTest {
public static void main(String[] args) {
// 容器
JFrame frame = new JFrame();
JPanel panel = new JPanel();
// 組件
JButton[] btns = new JButton[9];
for(int i=1;i<=9;i++) {
btns[i-1] = new JButton(""+i);
}
// 設置容器基本屬性
frame.setBounds(300, 300, 500, 500);
frame.setResizable(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 把組件依次放到容器中
// 注意,JPanel默認就是流式佈局管理器
panel.setLayout(new GridLayout(3,3));//設置panel的佈局管理器
for(JButton btn : btns) {
panel.add(btn);
}
// 注意,JFrame默認就是邊際佈局管理器
frame.add(panel);
// 設置主容器的可見性
frame.setVisible(true);
}
}
流式佈局管理器
package com.zzb.day39;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
/**
* 流式佈局管理器
*/
public class FlowLayoutTest {
public static void main(String[] args) {
// 容器
JFrame frame = new JFrame();
JPanel panel = new JPanel();
// 組件
JButton[] btns = new JButton[50];
for(int i=1;i<=50;i++) {
String str = i<10? "0"+i : ""+i;
btns[i-1] = new JButton(str);
}
// 設置容器基本屬性
frame.setBounds(300, 300, 500, 500);
frame.setResizable(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 把組件依次放到容器中
// 注意,JPanel默認就是流式佈局管理器
//panel.setLayout(new FlowLayout());//設置panel的佈局管理器
for(JButton btn : btns) {
panel.add(btn);
}
// 注意,JFrame默認就是邊際佈局管理器
frame.add(panel);
// 設置主容器的可見性
frame.setVisible(true);
}
}
卡片佈局管理器
package com.zzb.day39;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
/**
* 卡片佈局管理器
*/
public class CardLayoutTest {
public static void main(String[] args) {
// 容器
JFrame frame = new JFrame();
JPanel panel = new JPanel();
JPanel northPanel = new JPanel();
// 組件
JPanel[] panels = new JPanel[4];
panels[0] = new JPanel();
panels[0].setBackground(Color.RED);
panels[1] = new JPanel();
panels[1].setBackground(Color.BLACK);
panels[2] = new JPanel();
panels[2].setBackground(Color.BLUE);
panels[3] = new JPanel();
panels[3].setBackground(Color.GREEN);
JButton btn1,btn2,btn3,btn4;
btn1 = new JButton("RED");
btn2 = new JButton("BLACK");
btn3 = new JButton("BLUE");
btn4 = new JButton("GREEN");
JButton[] btns = new JButton[4];
btns[0] = btn1;
btns[1] = btn2;
btns[2] = btn3;
btns[3] = btn4;
// 設置容器基本屬性
frame.setBounds(300, 300, 500, 500);
frame.setResizable(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 把組件依次放到容器中
// 注意,JPanel默認就是流式佈局管理器
northPanel.add(btn1);
northPanel.add(btn2);
northPanel.add(btn3);
northPanel.add(btn4);
final CardLayout layout = new CardLayout();
panel.setLayout(layout);//設置panel的佈局管理器
panel.add("RED",panels[0]);
panel.add("BLACK",panels[1]);
panel.add("BLUE",panels[2]);
panel.add("GREEN",panels[3]);
// 注意,JFrame默認就是邊際佈局管理器
frame.add(northPanel,BorderLayout.NORTH);
frame.add(panel);
panel.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
layout.next(panel);
// layout.show(panel, "a4");
}
});
for(JButton btn : btns) {
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String value = btn.getText();
layout.show(panel, value);
}
});
}
// 設置主容器的可見性
frame.setVisible(true);
}
}
邊際佈局管理器
package com.zzb.day39;
import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
/**
* 邊際佈局管理器
*/
public class BorderLayoutTest {
public static void main(String[] args) {
// 容器
JFrame frame = new JFrame();
JPanel panel = new JPanel();
// 組件
JButton northBtn,southBtn,westBtn,eastBtn,centerBtn;
northBtn = new JButton("north");
southBtn = new JButton("south");
westBtn = new JButton("west");
eastBtn = new JButton("east");
centerBtn = new JButton("center");
// 設置容器基本屬性
frame.setBounds(300, 300, 500, 500);
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 把組件依次放到容器中
panel.setLayout(new BorderLayout());//設置panel的佈局管理器
panel.add(northBtn,BorderLayout.NORTH);java
panel.add(southBtn,BorderLayout.SOUTH);
panel.add(westBtn ,BorderLayout.WEST);
panel.add(eastBtn ,BorderLayout.EAST);
//注意,不指定位置,默認就是存放到center中間的空間
//panel.add(centerBtn);
panel.add(centerBtn,BorderLayout.CENTER);
frame.add(panel);
// 設置主容器的可見性
frame.setVisible(true);
}
}
自定義佈局管理器
package com.zzb.day39;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
/**
*
*/
public class MyLayoutTest {
public static void main(String[] args) {
// 容器
JFrame frame = new JFrame();
JPanel panel = new JPanel();
// 組件
JButton btn = new JButton("hello");
btn.setBounds(0, 0, 100, 30);
// 設置容器基本屬性
frame.setBounds(300, 300, 500, 500);
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 把組件依次放到容器中
panel.setLayout(null);//把panel中的佈局管理器設置爲null
panel.add(btn);
frame.add(panel);
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int x = (int)(Math.random()*400);
int y = (int)(Math.random()*400);
btn.setLocation(x, y);
}
});
// 設置主容器的可見性
frame.setVisible(true);
}
}
事件監聽1
package com.zzb.day39;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class MyJFrameTest1 {
//聲明用到的容器
private JFrame frame;
private JPanel panel;
//聲明用到的組件
private JButton button;
//初始化主容器並且設置基本的屬性
public MyJFrameTest1() {
frame = new JFrame("我的GUI");
frame.setBounds(300, 300, 500, 500);
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.initComponent();
frame.setVisible(true);
}
//初始化其他組件
private void initComponent() {
//1 創建容器和組件對象
panel = new JPanel();
button = new JButton("OK");
//2 設置容器的佈局管理器,如果使用容器默認的佈局管理器,則可以不寫這一步
//3 把組件依次存放到對應容器中
panel.add(button);
frame.add(panel);
//4 給組件添加事件監聽器(可選)
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("OK");
}
});
}
//創建當前類對象
public static void main(String[] args) {
new MyJFrameTest1();
}
}
事件監聽2
package com.zzb.day39;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class MyJFrameTest2 extends JFrame{
private static final long serialVersionUID = 1L;
//聲明用到的容器
private JPanel panel;
//聲明用到的組件
private JButton button;
//初始化主容器並且設置基本的屬性
public MyJFrameTest2() {
super("我的GUI");
super.setBounds(300, 300, 500, 500);
super.setResizable(false);
super.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.initComponent();
super.setVisible(true);
}
//初始化其他組件
private void initComponent() {
//1 創建容器和組件對象
panel = new JPanel();
button = new JButton("OK");
//2 設置容器的佈局管理器,如果使用容器默認的佈局管理器,則可以不寫這一步
//3 把組件依次存放到對應容器中
panel.add(button);
super.add(panel);
//4 給組件添加事件監聽器(可選)
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("OK");
}
});
}
//創建當前類對象
public static void main(String[] args) {
new MyJFrameTest2();
}
}
事件監聽3
package com.zzb.day39;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
// MyJFrameTest3繼承了JFrame,那麼這個MyJFrameTest3就可以當做前一個窗口來使用
// MyJFrameTest3同時有實現了監聽器接口,那麼MyJFrameTest3就可以當做一個監聽器來使用
public class MyJFrameTest3 extends JFrame implements ActionListener{
private static final long serialVersionUID = 1L;
//聲明用到的容器
private JPanel panel;
//聲明用到的組件
private JButton button;
//初始化主容器並且設置基本的屬性
public MyJFrameTest3() {
super("我的GUI");
super.setBounds(300, 300, 500, 500);
super.setResizable(false);
super.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.initComponent();
super.setVisible(true);
}
//初始化其他組件
private void initComponent() {
//1 創建容器和組件對象
panel = new JPanel();
button = new JButton("OK");
//2 設置容器的佈局管理器,如果使用容器默認的佈局管理器,則可以不寫這一步
//3 把組件依次存放到對應容器中
panel.add(button);
super.add(panel);
//4 給組件添加事件監聽器(可選)
button.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("OK");
}
//創建當前類對象
public static void main(String[] args) {
new MyJFrameTest3();
}
}