Java基礎---圖形介面
阿新 • • 發佈:2018-12-12
java中元件類都位於: java.awt 和 javax.swing
區別:
1.二者存在相同圖形類,區別在於swing的圖形都以J開頭
2.java.awt中的圖形類的圖形依賴系統(windows.linux)圖形庫
3.javax.swing中的圖形類的圖形都是sun自己去實現的
所有的圖形類都稱作為元件:
容器元件
非容器元件
容器元件:
一、窗體
public class JFrame1 { public static void main(String[] args) { // 建立一個窗體物件 JFrame frame = new JFrame("第一個窗體"); // 設定窗體的大小(象素為單位) // frame.setSize(300, 400); // 設定窗體左上角出現的位置,公式自己推導一下,哈哈,,只能適應固定螢幕解析度 // frame.setBounds((1366-300)/2, (768-400)/2, 300, 400); // 獲取解析度設定位置,窗體大小 initFrame(frame, 300, 400); // 設定窗體的可見性 frame.setVisible(true); // 設定窗體的關閉事件 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } // 設定窗體出現在中間位置 public static void initFrame(JFrame frame, int width, int height) { // 獲取預設系統工具包 Toolkit toolkit = Toolkit.getDefaultToolkit(); // 獲取螢幕的解析度。 Dimension d = toolkit.getScreenSize(); int x = (int) d.getWidth(); int y = (int) d.getHeight(); // 根據螢幕解析度設定位置 frame.setBounds((x - width) / 2, (y - height) / 2, width, height); } }
二、對話方塊
Dialog(對話方塊)
Dialog(Dialog owner, String title, boolean modal)
owner : 父級元件(窗體等)
title : 對話方塊的標題
modal : 模式
true: 對話方塊沒有關閉的時候,不準操作父級元件(窗體等)。
false: 對話方塊即使沒有關閉,還是可以操作父級元件(窗體等)
JOptionPane(對話方塊)
//訊息、 警告、 錯誤
showMessageDialog(Component parentComponent, Object message, String title, int messageType)
parentComponent: 父級元件(窗體等)
message : 顯示的訊息
title : 對話方塊的標題
messageType : 指定對話方塊的型別(訊息、 警告、 錯誤)
public class Dialog1 {
public static void main(String[] args) {
// 建立一個窗體
JFrame frame = new JFrame("窗體");
// 設定窗體
FrameUtil.initFrame(frame, 500, 400);
// frame.setBounds((1366-300)/2, (768-400)/2, 300, 400);
// 建立一個對話方塊
// 方式一:不好看
/*
* Dialog dialog2=new Dialog(frame, "dd",false);
* 設定對話方塊位置屬性+尺寸
* dialog2.setBounds(580, 250, 200, 200);
* dialog2.setVisible(true);
*/
// 方式二:好看一點的
JDialog dialog = new JDialog(frame, "對話方塊", false);
// 設定對話方塊位置屬性+尺寸
dialog.setBounds(580, 250, 200, 200);
dialog.setVisible(true);
// 訊息對話方塊
JOptionPane.showMessageDialog(frame, "明天放假了!爽!!", "通知:", JOptionPane.INFORMATION_MESSAGE);
// 警告對話方塊
JOptionPane.showMessageDialog(frame, "別在嫌我醜了", "警告:", JOptionPane.WARNING_MESSAGE);
// 錯誤對話方塊
JOptionPane.showMessageDialog(frame, "別睡覺了..", "出局:", JOptionPane.ERROR_MESSAGE);
// 確認對話方塊
int select = JOptionPane.showConfirmDialog(frame, "軟體繼續安裝嗎?");
System.out.println("num:" + select);
// 輸入對話方塊
String money = JOptionPane.showInputDialog(frame, "請輸入你要取的金額:");
System.out.println("money:" + money);
}
}
FileDialog(檔案對話方塊)
FileDialog(Dialog parent, String title, int mode)
parent : 父級元件(窗體等)
title: 標題
mode: FileDialog.LOAD(載入)
FileDialog.SAVE(儲存)
//檔案對話方塊
public class Dialog2 {
public static void main(String[] args) {
// 建立窗體
JFrame frame = new JFrame("窗體");
// 設定窗體
FrameUtil.initFrame(frame, 500, 400);
// 建立檔案對話方塊
// FileDialog dialog = new FileDialog(frame, "開啟檔案", FileDialog.SAVE);
FileDialog dialog = new FileDialog(frame, "開啟檔案", FileDialog.LOAD);
// 設定顯示dialog
dialog.setVisible(true);
// 獲取檔案的路徑
System.out.println("檔案的路徑:" + dialog.getDirectory());
// getFile() 獲取檔名。
System.out.println("檔名:" + dialog.getFile());
}
}
三、面板
public class Panel1 {
public static void main(String[] args) {
JFrame frame = new JFrame("窗體");
// 面板
JPanel panel = new JPanel();
panel.setBackground(Color.BLUE);
// 把面板新增到窗體上。
frame.add(panel);
FrameUtil.initFrame(frame, 500, 400);
}
}
public class Panel2 {
public static void main(String[] args) {
JFrame frame = new JFrame("註冊");
// 建立一個面板
JPanel panel = new JPanel();
// 建立一個標籤物件
JLabel nameLabel = new JLabel("使用者名稱:");
// 輸入框
JTextField nameField = new JTextField(12);
// 把元件新增面板
panel.add(nameLabel);
panel.add(nameField);
// 密碼
JLabel passLabel = new JLabel("密碼:");
// 密碼框
JPasswordField passField = new JPasswordField(12);
panel.add(passLabel);
panel.add(passField);
// 性別: 單選框
JLabel sexLabel = new JLabel("性別:");
// 單選框 注意: 單選框一定要進行分組,在同一組的單選框中只能選擇其中的一個 true:預設值
JRadioButton man = new JRadioButton("男", true);
JRadioButton woman = new JRadioButton("女");
// 分組
ButtonGroup group = new ButtonGroup();
group.add(man);
group.add(woman);
// 把元件新增面板
panel.add(sexLabel);
panel.add(man);
panel.add(woman);
// 城市 --- 下拉框
JLabel cityLabel = new JLabel("來自城市");
Object[] citys = { "北京", "上海", "廣州", "深圳" };
JComboBox<Object> cityBox = new JComboBox<Object>(citys);
panel.add(cityLabel);
panel.add(cityBox);
// 愛好---複選框
JLabel hobitLabel = new JLabel("愛好");
JCheckBox java = new JCheckBox("java");
JCheckBox javascript = new JCheckBox("JS");
JCheckBox write = new JCheckBox("敲java");
panel.add(hobitLabel);
panel.add(java);
panel.add(javascript);
panel.add(write);
// 自我簡介
JLabel introLabel = new JLabel("自我簡介:");
JTextArea area = new JTextArea(15, 15);
panel.add(introLabel);
panel.add(area);
frame.add(panel);
FrameUtil.initFrame(frame, 830, 500);
}
}
非容器元件
一、選單元件:
選單條(JMenuBar) 選單(JMenu) 選單項(JMenuItem)
關係: 選單條新增選單 , 選單新增選單項
複選選單: 選單新增選單, 然後選單再新增選單項。
public class Menu1 {
// 窗體
JFrame frame = new JFrame("記事本");
// 選單條
JMenuBar bar = new JMenuBar();
// 選單
JMenu fileMenu = new JMenu("檔案");
JMenu editMenu = new JMenu("編輯");
JMenu helpMenu = new JMenu("幫助");
// 選單項
JMenuItem open = new JMenuItem("開啟");
JMenuItem save = new JMenuItem("儲存");
JMenuItem copy = new JMenuItem("拷貝");
JMenuItem about = new JMenuItem("關於");
JMenuItem version = new JMenuItem("升級");
// 文字域
JTextArea area = new JTextArea(20, 20);
public void init() {
// 把選單新增到選單條上
bar.add(fileMenu);
bar.add(editMenu);
// 把選單項新增到選單
fileMenu.add(open);
fileMenu.add(save);
editMenu.add(copy);
// 複選選單, 選單新增到選單上。
editMenu.add(helpMenu);
// 選單新增選單項
helpMenu.add(about);
helpMenu.add(version);
// 把選單條新增到窗體上
frame.add(bar, BorderLayout.NORTH);
frame.add(area);
//設定窗體
FrameUtil.initFrame(frame, 500, 600);
}
public static void main(String[] args) {
new Menu1().init();
}
}
佈局管理器 :
作用就:擺放元件。不同佈局管理器有不同風格
1.BorderLaytout(邊框佈局管理器):
borderLayout 注意:
1. 容器使用了BorderLayout佈局管理器,容器中元件沒有指定具體的方位,預設在中間。
2. Frame預設使用BorderLayout佈局管理器.
3. 中間的元件都會佔據其東南西北那個元件空缺位置。
public class BorderLayout1 {
public static void main(String[] args) {
// 建立一個窗體
JFrame frame = new JFrame("邊框佈局管理器");
// 建立邊框佈局管理器
BorderLayout borderLayout = new BorderLayout();
// 讓窗體使用邊框佈局管理器
frame.setLayout(borderLayout);
// 位置擺放
frame.add(new JButton("北"), BorderLayout.NORTH);
frame.add(new JButton("南"), BorderLayout.SOUTH);
frame.add(new JButton("西"), BorderLayout.WEST);
frame.add(new JButton("東"), BorderLayout.EAST);
frame.add(new JButton("中"), BorderLayout.CENTER);
// 初始化窗體
FrameUtil.initFrame(frame, 300, 300);
}
}
2.FlowLayout 流式佈局管理器
FlowLayout注意:
1. 使用FlowLayout的時候預設是居中對齊的。
2. panel預設使用的佈局管理器就是FlowLayout.
public class FlowLayout1 {
public static void main(String[] args) {
JFrame frame = new JFrame("窗體");
// 面板
JPanel panel = new JPanel();
// 建立一個流式佈局管理器
panel.setBackground(Color.BLUE);
// 預設居中對其
// FlowLayout flowLayout = new FlowLayout();
FlowLayout flowLayout = new FlowLayout(FlowLayout.LEFT, 10, 0);
// 讓面板使用流式佈局管理器
panel.setLayout(flowLayout);
frame.add(panel);
panel.add(new JButton("one"));
panel.add(new JButton("two"));
panel.add(new JButton("three"));
panel.add(new JButton("four"));
FrameUtil.initFrame(frame, 300, 300);
}
}
3.GridLayout 表格佈局管理器
如果新增的元件超過了表格的個數,那麼會新增多一列處理
public class GridLayout1 {
public static void main(String[] args) {
// 建立一個窗體
JFrame frame = new JFrame("計算器");
// 建立一個表格佈局管理器
GridLayout gridLayout = new GridLayout(4, 4);
frame.setLayout(gridLayout);
for (int i = 0; i < 10; i++) {
frame.add(new JButton(i + ""));
}
frame.add(new JButton("+"));
frame.add(new JButton("-"));
frame.add(new JButton("*"));
frame.add(new JButton("/"));
frame.add(new JButton("="));
frame.add(new JButton("."));
FrameUtil.initFrame(frame, 250, 300);
}
}
事件:元件發生了指定的動作時,會有相應的處理方案。
事件組成: 事件源、監聽器、事件、處理方式
動作監聽器:動作監聽器針對 滑鼠點選 和 空格按鍵
public class Listener1 {
public static void main(String[] args) {
// 建立窗體
JFrame frame = new JFrame("窗體");
// 建立一個按鈕
JButton button = new JButton("點我啊");
// 個按鈕新增一個監聽器
button.addActionListener(new ActionListener() {
// 如果發生滑鼠點選、按下空格鍵就會呼叫actionPerformed方法
@Override
public void actionPerformed(ActionEvent e) {
// 獲取事件源物件
JButton button = (JButton) e.getSource();
String content = button.getText();
if ("點我啊".equals(content)) {
button.setText("點他吧!");
} else {
button.setText("點我啊");
}
}
});
frame.add(button);
FrameUtil.initFrame(frame, 200, 200);
}
}
滑鼠監聽器
public class Listener2 {
public static void main(String[] args) {
JFrame frame = new JFrame("窗體");
// 建立一個按鈕
JButton button = new JButton("點我啊");
// 給按鈕新增一個滑鼠監聽器
/*
* button.addMouseListener(new MouseListener() {
*
* @Override public void mouseReleased(MouseEvent e) {
* System.out.println("滑鼠鬆開.."); }
*
* @Override public void mousePressed(MouseEvent e) {
* System.out.println("滑鼠按下..."); }
*
* @Override public void mouseExited(MouseEvent e) {
* System.out.println("滑鼠離開..."); }
*
* @Override public void mouseEntered(MouseEvent e) {
* System.out.println("滑鼠進入...."); }
*
* @Override public void mouseClicked(MouseEvent e) {
* System.out.println("滑鼠單擊...."); } });
*
*/
// MouseAdapter介面卡 ---- 該類已經實現了MouseListener介面,但是實現的方法全部都是空實現。
button.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2) {
System.out.println("雙擊了...");
}
}
});
frame.add(button);
FrameUtil.initFrame(frame, 200, 200);
}
}
鍵盤監聽器
public class Listener3 {
public static void main(String[] args) {
JFrame frame = new JFrame("窗體");
// 建立一個按鈕
JButton button = new JButton("點我啊");
// 給按鈕新增一個鍵盤監聽器
/*
* button.addKeyListener(new KeyListener() {
*
* @Override public void keyTyped(KeyEvent e) {
* System.out.println(" 鍵入某個鍵..."); }
*
* @Override public void keyReleased(KeyEvent e) {
* System.out.println("釋放鍵 ..."); }
*
* @Override public void keyPressed(KeyEvent e) {
* System.out.println("按下某個鍵..."); } });
*/
button.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
System.out.println("按下鍵的字元:" + e.getKeyChar() + " 鍵的code:" + e.getKeyCode());
}
});
frame.add(button);
FrameUtil.initFrame(frame, 200, 200);
}
}