不少與AWT相似.html
事件處理參考:Java學習筆記--AWT事件處理 java
1.設計模式:設計模式
模型:存儲內容
視圖:顯示內容
控制器:處理用戶輸入·框架
2. 文本輸入經常使用組件ide
2.1 文本域:工具
JLabel labelname = new JLabel("username");
JTextArea textname = new JTextArea(1,40);//參數也能夠爲("默認字符",行,列);
JPanel panel = new JPanel();
panel.add(labelname);
panel.add(textname);佈局
若是須要在運行時從新設定列數,須要調用包含這個文本框的容器的revalidate方法,能夠從新設定容器的尺寸。
textField.setColumns(10);
panel.revalidate();post
2.2 標籤:JLabel
容納文本的組件,沒有任何修飾,不能響應用戶輸入。
能夠選擇內容的排列方式,能夠用SwingConstants接口中的常量,如LEFT, RIGHT, CENTER, NORTH, EAST.
JLabel labelname = new JLabel("username",SwingConstants.RIGHT);學習
2.3 密碼域:JPasswordField
JPasswordField(String text , int columns); //建立一個新的密碼域
char[] getPassword() //返回密碼域中的文本url
2.4 文本區:
用戶的輸入超過一行是,也能夠用JTextArea,
textArea = nwe JTextArea(8,40); //8行40列的文本區
注:用戶不會受限於輸入指定的行列,輸入過長時,文本會滾動。
能夠開啓換行特性避免裁剪過長的行 textArea.setLineWrap(true);
2.5 滾動條:
在Swing中,文本區沒有滾動條,須要時能夠將文本區插入到滾動窗格中
textArea = new JTextArea(8,40);
JScrollPane scrollPane = new JScrollPane(textArea);
連接JScrollPane的使用:http://pan.baidu.com/s/1ntHWVMx
例子
public class MySwingModel { public static void main(String args[]){ JFrame frame = new JFrame(); frame.setSize(450,450); frame.setLayout(new BorderLayout(10,10));//設置佈局管理器 //////////////////// PART SOUTH /////////////////////// //每一個JButton對象都存儲了一個按鈕模型對象,能夠這樣獲得它的引用 JButton mbutton = new JButton("個人按鈕"); ButtonModel mode1 = mbutton.getModel(); JPanel panelSouth = new JPanel();//新建面板 panelSouth.add(mbutton); //將按鈕加入面板 /////////////////// PART NORTH///////////////////////// //指定文本域的行數、列數 JLabel labelname = new JLabel("username",SwingConstants.CENTER); final JTextArea textname = new JTextArea("默認用戶名,請刪除後輸入用戶名",1,20); String strpassword = null; JLabel labelpassword = new JLabel("password",SwingConstants.CENTER); final JPasswordField textpassword = new JPasswordField(strpassword,40); //char [] mypassword = textpassword.getPassword();//獲取密碼 JPanel panelNorth = new JPanel();//建立網格佈局的面板,添加用戶名、密碼 panelNorth.setLayout(new GridLayout(2,2,10,10)); panelNorth.add(labelname); panelNorth.add(textname); panelNorth.add(labelpassword); panelNorth.add(textpassword); ////////////////// PART CENTER ////////////////////// final JTextArea textwords = new JTextArea(15,40); textwords.setLineWrap(true);//開啓換行特性,避免文本過長 JScrollPane textscrollPane = new JScrollPane(textwords);//新建滾動窗格,當行數過大時顯示滾動條 ////////////////// 設置按鈕響應 /////////////////////// mbutton.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent mEvent){ String myName = textname.getText(); char[] mypassword = textpassword.getPassword();//獲取密碼 textwords.setText("用戶名:"+myName+"\n密碼:"+new String(mypassword)); } }); ///////////////////////////////////////////////////// frame.add(panelSouth,BorderLayout.SOUTH); //將面板加入框架 frame.add(panelNorth,BorderLayout.NORTH); frame.add(textscrollPane,BorderLayout.CENTER); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } }
3. 選擇組件
3.1 複選框
複選框須要一個緊鄰它的標籤說明用途
JCheckBox bold = new JCheckBox("bold");
可使用setSelected方法選定/取消複選框
bold.setSelected(true);
isSelected方法返回每一個複選框當前狀態。true/false
兩個複選框可用同一監聽器
bold.addActionListener(listener);
italic.addActionListener(listener);
public class MySwingChoose { public static void main(String args[]){ JFrame frame = new JFrame(); frame.setSize(450,450); frame.setLayout(new BorderLayout(10,10)); //設置佈局管理器 final JCheckBox bold = new JCheckBox("Bold"); final JCheckBox italic = new JCheckBox("Italic"); final JLabel labelSelect = new JLabel(); //顯示選擇了哪些選項 ActionListener mylistener = new ActionListener(){ public void actionPerformed(ActionEvent e) { String strIsselect =""; if(bold.isSelected()==true){ strIsselect+="Bold已選擇"; }if(italic.isSelected()==true){ strIsselect+="Italic已選擇"; } labelSelect.setText(strIsselect); } }; bold.addActionListener(mylistener); italic.addActionListener(mylistener); JPanel panel = new JPanel(); panel.add(bold); panel.add(italic); panel.add(labelSelect); frame.add(panel); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } }
3.2 單選按鈕組 JRadioButton
實現單選按鈕組
爲單選按鈕組構造一個ButtonGroup對象
將JRadionButton類型的對象添加到按鈕組中
public class MySwingRadio { public static void main(String args[]){ JFrame frame = new JFrame(); frame.setSize(450,450); frame.setLayout(new BorderLayout(10,10));//設置佈局管理器 //建立單選按鈕組 ButtonGroup mbuttongroup = new ButtonGroup(); //建立單選按鈕 JRadioButton jradioSmall = new JRadioButton("small",false); JRadioButton jradioMedium = new JRadioButton("medium",false); JRadioButton jradioLarge = new JRadioButton("large",false); //將單選按鈕添加到按鈕組 mbuttongroup.add(jradioSmall); mbuttongroup.add(jradioMedium); mbuttongroup.add(jradioLarge); //將按鈕添加到面板 JPanel panel = new JPanel(); panel.add(jradioSmall); panel.add(jradioMedium); panel.add(jradioLarge); //將面板添加到框架,而不是單選按鈕組添加到框架 frame.add(panel); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } }
另外一種實現方式,(不錯的例子,能夠直接設定監聽器)
public class MySwingRadio2 { private final static int DEFAULT_SIZE = 36; //建立單選按鈕組 private static ButtonGroup mbuttongroup = new ButtonGroup(); //建立面板 static JPanel panel = new JPanel(); static JLabel mlabel = new JLabel(""); public static void main(String args[]){ JFrame frame = new JFrame(); frame.setSize(450,450); frame.setLayout(new BorderLayout(10,10));//設置佈局管理器 //將單選按鈕添加到按鈕組 addRadioButton("small",8); addRadioButton("medium",16); addRadioButton("large",32); //將面板添加到框架,而不是單選按鈕組添加到框架 frame.add(mlabel,BorderLayout.CENTER); frame.add(panel,BorderLayout.NORTH); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } public static void addRadioButton(final String name,final int size){ boolean selected = (size == DEFAULT_SIZE); //新建單選按鈕 JRadioButton button = new JRadioButton(name,selected); //將單選按鈕添加到單選按鈕組 mbuttongroup.add(button); //將單選按鈕添加到面板 panel.add(button); //設定監聽器,在標籤中顯示點擊的單選 按鈕 ActionListener mylistener = new ActionListener(){ public void actionPerformed(ActionEvent e){ mlabel.setText(name); } }; button.addActionListener(mylistener); } }
3.3 邊框 Border javax.swing.border
調用BorderFactory的靜態方法建立邊框
BroderFactory.createLineBorder(Border border)
BroderFactory.createCompoundBorder(Border border)
BroderFactory.createTitledBorder(Border border)
全部的方式見javax.swing下面的類BorderFactory
調用JComponent類中setBorder方法將結果邊框添加到組件
Border etched = BorderFactory.createEtchedBorder() Border titled = BorderFactory.createTitledBorder(etched,"A Title") panel.setBorder(titled)
框架能夠組合。
示例代碼
public class MySwingText { public static void main(String args[]){ JFrame frame = new JFrame(); frame.setSize(450,450); frame.setLayout(new BorderLayout(10,10));//設置佈局管理器 JPanel panel = new JPanel(); Border etched = BorderFactory.createEtchedBorder(); Border titled = BorderFactory.createTitledBorder(etched,"A Title"); panel.setBorder(titled); frame.add(panel); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } }
3.4組合框 JComboBox<>
建立組合框 :
JComboBox<String> faceCombo = new JConboBox<>();
調用setEditable方法讓組合框可編輯
獲取當前選項 :getSelectedItem
若組合框不可編輯,最好調用 : faceCombo.getItemAt(faceCombo.getSelectedIndex())
addItem方法添加選項 : faceCombo.addItem("Serif");
在任意位置插入選項 : faceCombo.insertItemAt("Monospaced",0);
刪除選項:
faceCombo.removeItem("Monospaced");
faceCombo.removeItemAt(0);
示例
UseComboBox.java
public class UseComboBox { public static void main(String[] args) { ComboBoxFrame cbframe = new ComboBoxFrame(); cbframe.setVisible(true); cbframe.setSize(400,400); cbframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }
ComboBoxFrame.java
public class ComboBoxFrame extends JFrame{ private JComboBox<String> faceCombo; private JLabel label; private static final int DEFAULT_SIZE =24; public ComboBoxFrame(){ //添加文字標籤 label = new JLabel("個人標籤文字"); label.setFont(new Font("Serif",Font.PLAIN,DEFAULT_SIZE)); add(label,BorderLayout.CENTER); //添加組合框 faceCombo = new JComboBox(); //建立組合框 faceCombo.addItem("Serif");//添加條目 faceCombo.addItem("SansSerif"); faceCombo.addItem("MonoSpaced"); faceCombo.addItem("Dialog"); faceCombo.addItem("DialogInput"); //爲組合框設置監聽器 faceCombo.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { label.setFont(new Font(faceCombo.getItemAt(faceCombo.getSelectedIndex()), Font.PLAIN,DEFAULT_SIZE)); } }); //將組合框添加到panel JPanel comboPanel = new JPanel(); comboPanel.add(faceCombo); add(comboPanel,BorderLayout.SOUTH); pack(); } }
3.5 滑動條 JSlider
JSlider slider = new JSlider(min,max,initialValue);
4. 菜單
4.1菜單建立
(1) 建立菜單欄 : JMenuBar menubar = new JMenuBar();
(2) 將菜單欄添加到框架上: frame.setJMenuBar(menuBar);
(3) 爲每個菜單創建一個菜單對象: JMenu editMenu = new JMenu("Edit");
(4) 將頂層菜單添加到菜單欄中: menuBar.add(editMenu);
(5) 向(3)中的菜單對象添加菜單項
JMenuItem pasteItem = new JMenuItem("Paste");
editMenu.add(pasteItem);//添加菜單項
editMenu.addSparator();//添加分隔符
JMenu optionMenu = ... ; //a submenu
editMenu.add(optionMenu);能夠看到分隔符位於Paste和Read-only菜單項之間
動做監聽
爲每一個菜單項JMenuItem安裝一個動做監聽器
ActionListener listener = ...;
pasteItem.addActionListener(listener);
可使用 JMenu.add(String s)方法將菜單項插入到菜單的尾部
editMenu.add("Paste");
ADD方法返回建立的子菜單項,能夠採用下列方法獲取它,並添加監聽器:
JMenuItem pasteItem = editMenu.add("Paste");
pasetItem.addActionListener(listener);
在一般狀況下,菜單項出發的命令也能夠經過其餘用戶界面元素(如工具欄上的按鈕)激活。一般,採用擴展抽象類AbstractAction來定義一個實現Action接口的類。這裏須要在AbstractAction對象的構造器中指定菜單項標籤而且覆蓋actionPerformed方法來得到菜單動做處理器。
Action exitAction = new AbstractAction("Edit"){ public void actionPerformed(ActionEvent event){ //動做代碼 System.exit(0); } };
而後將動做添加到菜單中
JMenuItem exitItem = fileMenu.add(exitAction);
這個命令利用動做名將一個菜單項添加到菜單中,這個動做對象將做爲它的監聽器 。
上面這條語句是下面兩條語句的快捷形式:
JMenuItem exitItem = new JMenuItem(exitAction); fileMenu.add(exitItem);
示例代碼
public class MyJMenu { public static void main(String[] args) { JFrame mframe = new JFrame(); JMenuBar menubar = new JMenuBar();//建立菜單欄 //////////////////////// 菜單對象1 ////////////////////////// JMenu editMenu = new JMenu("Edit");//爲每個菜單創建一個菜單對象 menubar.add(editMenu);//將菜單添加到菜單欄 //-- 菜單項1 --// JMenuItem pasteItem = new JMenuItem("Paste"); editMenu.add(pasteItem);//添加菜單項 editMenu.addSeparator();//添加分隔符 //-- 菜單項2 --// JMenuItem readonlyItem = new JMenuItem("Read-Only"); editMenu.add(readonlyItem);//添加菜單項 ////////////////////////菜單對象2 ////////////////////////// JMenu sourceMenu = new JMenu("Source"); menubar.add(sourceMenu); editMenu.addSeparator();//添加分隔符 ////////////////////////菜單對象3 ////////////////////////// Action exitAction = new AbstractAction("exit"){ public void actionPerformed(ActionEvent event){ //動做代碼 System.exit(0); } }; JMenuItem exitItem = editMenu.add(exitAction); /* * 上面這條語句是下面兩條語句的快捷形式: * JMenuItem exitItem = new JMenuItem(exitAction); * editMenu.add(exitItem); * */ //////////////////////////////////////////////////////////// mframe.setJMenuBar(menubar);//菜單欄添加到框架上 mframe.setSize(450, 300); mframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); mframe.setVisible(true); } }
代碼效果