1)、流佈局:java
FlowLayout 從左到右,自上而下方式在容器中排列,控件的大小不會隨容器大小變化.編程
容器.setLayout(new FlowLayout(FlowLayout.LEFT));dom
2)、網格佈局:ide
GridLayout 按照指定行數與列數,將容器分紅大小相等的單元格每一個單元格放置一個控件. 不能將控件放在指定單元格函數
容器.setLayout(new GridLayout(3,4,10,15));佈局
3)、邊界佈局:this
BorderLayout 將容器分紅東、西、南、北、中五個部分spa
容器.setLayout(new BorderLayout());設計
窗口的內容面板默認佈局就是邊界佈局。code
容器.add(控件,BorderLayout.NORTH);
4)、混合佈局:
使用JPanel,將多個佈局組合在一塊兒使用
5)、絕對佈局 null:
以座標定位
容器.setLayout(null);
每一個控件在放置在容器以前,必須設置其邊界 setBounds(x,y,width,height);
btn.setBounds(10,100,30,60);
1)、事件源 EventSource:可以觸發事件控件 如:JButton,JTextField,JFrame,JComboBox,....
2)、事件 Event:ActionEvent,KeyEvent,WindowEvent,TextEvent,...
3)、事件偵聽者Listener(接口) ActionListener,WindowListener,...
class A implements ActionListener{
public void actionPerformed(ActionEvent e){
....
}
}
A lis=new A();
4)、事件處理函數
public void actionPerformed(ActionEvent e){
....
}
事件流程:事件源觸發事件-->事件源偵聽者接收事件-->自動調用相應事件處理函數.
窗體類:
package 簡單數字對應窗體; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Numcompare extends JFrame{ JTextField text; JLabel label; Numcompare(){ setTitle("Number change"); //限制輸入一個數字 text=new JTextField(10); label=new JLabel(); label.setText("請輸入0-9的數字"); text.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String getstr=text.getText(); String showstr=null; switch (getstr) { case "0": showstr="zero"; break; case "1": showstr="one"; break; case "2": showstr="two"; break; case "3": showstr="three"; break; case "4": showstr="four"; break; case "5": showstr="five"; break; case "6": showstr="six"; break; case "7": showstr="seven"; break; case "8": showstr="eight"; break; case "9": showstr="nine"; break; default: showstr=("請輸入0-9的數字"); break; } label.setText(showstr); text.setText(null); } }); setLayout(new FlowLayout()); add(text); add(label); setBounds(100,100,460,190); setVisible(true); validate(); setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);; } }
實現類(注:如下省略實現類--實例化自定義窗體)
package 簡單數字對應窗體; public class test { public static void main(String[] args) { new Numcompare(); } }
結果:
窗體類:
package 簡單計算窗體; import java.awt.event.*; import java.math.BigInteger; import java.awt.*; import javax.swing.*; public class Caculate extends JFrame{ JTextArea text1,text2; JButton jb1,jb2; JLabel label; Caculate(){ text1=new JTextArea(2,4); text2=new JTextArea(2,4); jb1=new JButton("+"); jb2=new JButton("*"); label=new JLabel(); JSplitPane p1; JPanel p2=new JPanel(); jb1.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String n1=text1.getText(); String n2=text2.getText(); try { BigInteger num1=new BigInteger(n1); BigInteger num2=new BigInteger(n2); label.setText((num1.add(num2)).toString()); }catch (Exception ee) { label.setText("請輸入整數"); text1.setText(null); text2.setText(null); } } }); jb2.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String n1=text1.getText(); String n2=text2.getText(); try { BigInteger num1=new BigInteger(n1); BigInteger num2=new BigInteger(n2); label.setText((num1.multiply(num2)).toString()); }catch (Exception ee) { label.setText("請輸入整數"); text1.setText(null); text2.setText(null); } } }); setLayout(new GridLayout(3,1)); p1=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,text1,text2); p1.setDividerLocation(117); add(p1); p2.setLayout(new GridLayout(1,2)); p2.add(jb1); p2.add(jb2); add(p2); add(label); setBounds(100,100,260,190); setVisible(true); validate(); setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); } }
結果:
窗體類
package 隨機數和; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.math.BigDecimal; import javax.swing.*; public class RandomAdd extends JFrame{ JLabel label1=new JLabel("數字一"); JLabel label2=new JLabel("數字二"); JLabel label3=new JLabel("結果"); JButton jb1=new JButton("產生"); JButton jb2=new JButton("計算"); RandomAdd(){ setTitle("隨機生成數 相加計算"); JTextArea ja1=new JTextArea(2,4); JTextArea ja2=new JTextArea(2,4); JTextArea ja3=new JTextArea(2,4); Box basebox,box1,box2; jb1.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { ja1.setText(Math.random()*100+""); ja2.setText(Math.random()*100+""); ja3.setText(null); } }); jb2.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { try { BigDecimal num1 = new BigDecimal(ja1.getText()); BigDecimal num2 = new BigDecimal(ja2.getText()); ja3.setText(num1.add(num2).toString()); }catch (Exception ee) { ja3.setText("請點擊產生鍵"); } } }); box1=Box.createVerticalBox(); box1.add(label1); box1.add(Box.createHorizontalStrut(8)); box1.add(label2); box1.add(Box.createHorizontalStrut(8)); box1.add(label3); box1.add(Box.createHorizontalStrut(8)); box2=Box.createVerticalBox(); box2.add(ja1); box2.add(Box.createHorizontalStrut(8)); box2.add(ja2); box2.add(Box.createHorizontalStrut(8)); box2.add(ja3); box2.add(Box.createHorizontalStrut(8)); basebox=Box.createHorizontalBox(); basebox.add(box1); basebox.add(Box.createHorizontalStrut(80)); basebox.add(box2); setLayout(new GridLayout(2,1)); JPanel jp=new JPanel(); add(basebox); jp.add(jb1); jp.add(jb2); add(jp); setBounds(100,100,260,190); setVisible(true); validate(); setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); } }
結果
窗體類
package 選座位; import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.event.*; import javax.swing.*; public class ChooseChair extends JFrame implements ActionListener{ ChooseChair(){ JButton jb0=new JButton("座位0"); JButton jb1=new JButton("座位1"); JButton jb2=new JButton("座位2"); JButton jb3=new JButton("座位3"); JButton jb4=new JButton("座位4"); JButton jb5=new JButton("座位5"); jb0.addActionListener(this); jb1.addActionListener(this); jb2.addActionListener(this); jb3.addActionListener(this); jb4.addActionListener(this); jb5.addActionListener(this); JLabel label=new JLabel("講臺",JLabel.CENTER); JPanel jp=new JPanel(); jp.setLayout(new GridLayout(2,3)); jp.add(jb0); jp.add(jb1); jp.add(jb2); jp.add(jb3); jp.add(jb4); jp.add(jb5); add(jp,BorderLayout.CENTER); add(label,BorderLayout.NORTH); setBounds(100,100,260,190); setVisible(true); validate(); setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); } @Override public void actionPerformed(ActionEvent e) { System.out.println(e.getActionCommand()+"被選中"); } }
結果:
窗體類
package 圖書館辦證; import java.awt.BorderLayout; import java.awt.FlowLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.Box; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JPanel; import javax.swing.JTextArea; import javax.swing.JTextField; public class LibraryRegister extends JFrame{ LibraryRegister(){ setTitle("圖書館辦理"); JLabel label0=new JLabel("圖書證註冊"); JLabel label1=new JLabel("姓名:"); JLabel label2=new JLabel("性別:"); JLabel label3=new JLabel("身份:"); JLabel label4=new JLabel("單位:"); JLabel label5=new JLabel("證件號碼:"); JLabel label6=new JLabel("註冊日期:"); JLabel label7=new JLabel("有效日期:"); JTextField ja1=new JTextField(); JTextArea ja2=new JTextArea(1,1); JTextArea ja3=new JTextArea(1,1); JTextArea ja4=new JTextArea(1,1); JComboBox jm1=new JComboBox(); JComboBox jm2=new JComboBox(); JComboBox jm3=new JComboBox(); jm1.addItem("男"); jm1.addItem("女"); jm2.addItem("學生"); jm2.addItem("老師"); jm3.addItem("計算機系"); jm3.addItem("英語系"); jm3.addItem("國交系"); JPanel jp1=new JPanel(); JPanel jp2=new JPanel(); JButton jb1=new JButton("添加"); JButton jb2=new JButton("刪除"); JButton jb3=new JButton("撤銷"); JButton jb4=new JButton("退出"); Box basebox,box1,box2; //上部 jp1.add(label0); //中部 box1=Box.createVerticalBox(); box1.add(label1); box1.add(Box.createVerticalStrut(15)); box1.add(label2); box1.add(Box.createVerticalStrut(15)); box1.add(label3); box1.add(Box.createVerticalStrut(15)); box1.add(label4); box1.add(Box.createVerticalStrut(15)); box1.add(label5); box1.add(Box.createVerticalStrut(15)); box1.add(label6); box1.add(Box.createVerticalStrut(15)); box1.add(label7); box2=Box.createVerticalBox(); box2.add(ja1); box2.add(Box.createVerticalStrut(8)); box2.add(jm1); box2.add(Box.createVerticalStrut(8)); box2.add(jm2); box2.add(Box.createVerticalStrut(8)); box2.add(jm3); box2.add(Box.createVerticalStrut(8)); box2.add(ja2); box2.add(Box.createVerticalStrut(8)); box2.add(ja3); box2.add(Box.createVerticalStrut(8)); box2.add(ja4); basebox=Box.createHorizontalBox(); basebox.add(box1); basebox.add(Box.createHorizontalStrut(200)); basebox.add(box2); //底部按鈕 懶得實現 jp2.add(jb1); jp2.add(jb2); jp2.add(jb3); jp2.add(jb4); setLayout(new BorderLayout()); add(jp1,BorderLayout.NORTH); add(basebox); add(jp2,BorderLayout.SOUTH); setBounds(100,100,500,325); setVisible(true); validate(); setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); } }
結果
package 借用物品; import java.awt.Dimension; import java.awt.GridLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; public class BorrowItem extends JFrame{ BorrowItem(){ setTitle("借用物品"); JLabel label1=new JLabel("員工編號:"); JLabel label2=new JLabel("借用器具:"); JLabel label3=new JLabel("借用日期:"); JLabel label4=new JLabel("歸還日期:"); JLabel label5=new JLabel("借用緣由:"); JTextField text1=new JTextField(9); JTextField text2=new JTextField(9); JTextField text3=new JTextField(9); JTextField text4=new JTextField(9); JTextField text5=new JTextField(25); JButton jb1=new JButton("肯定"); JButton jb2=new JButton("取消"); Dimension preferredSize = new Dimension(160,30);//設置尺寸 jb1.setPreferredSize(preferredSize ); jb2.setPreferredSize(preferredSize ); setLayout(new GridLayout(4,1)); JPanel jp1=new JPanel(); JPanel jp2=new JPanel(); JPanel jp3=new JPanel(); JPanel jp4=new JPanel(); jp1.add(label1); jp1.add(text1); jp1.add(label2); jp1.add(text2); jp2.add(label3); jp2.add(text3); jp2.add(label4); jp2.add(text4); jp3.add(label5); jp3.add(text5); jp4.add(jb1); jp4.add(jb2); add(jp1); add(jp2); add(jp3); add(jp4); setBounds(100,100,350,180); setVisible(true); validate(); setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); } }
結果