我們知道一個完整的程式界面包括視窗和視窗中的各種元件,常見的元件有按鈕,文本框,下拉框等等。Swing中也有類似這樣的元件,它們是怎麼用的呢?今天就和大家一起學習回顧一下這方面的知識。 本篇介紹:JLabel、JButton、JTextField 、JTextArea 、JCheckBox、JRadioButton 、JComboBox 和JList這8種常見元件
一、标簽元件:JLabel
标簽是一種可以包含文本和圖檔的非互動元件,其文本可以是單行文本,也可以是 HTML 文本。
- 構造方法如下:
- 常用方法如下:
-
以下是一個例子:
建立3個标簽
package swing;
import java.awt.Toolkit;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
/**
*使用 JFrame 元件建立一個視窗,然後向視窗中添加 3 個标簽,
*這 3 個标簽分别使用不同的建立方法。
*/
public class Demo09_JLabel {
public static void main(String[] args) {
JFrame frame=new JFrame("Java标簽元件示例"); //建立Frame視窗
JPanel jp=new JPanel(); //建立面闆
JLabel label1=new JLabel("普通标簽"); //建立标簽
JLabel label2=new JLabel();
label2.setText("調用setText()方法");
ImageIcon img=new ImageIcon("kitty.png"); //建立一個圖示
//建立既含有文本又含有圖示的JLabel對象
JLabel label3=new JLabel("開始理财",img,JLabel.CENTER);
jp.add(label1); //添加标簽到面闆
jp.add(label2);
jp.add(label3);
frame.add(jp);
SwingUtils.setCenter(frame);//設定窗體大小600*800并居中
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
二、按鈕元件:JButton
按鈕是視窗中最常見的元件之一。
- 構造方法如下:
- 常用方法有以下這些:
-
以下是一個例子:
建立4個按鈕
package swing;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Toolkit;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
/**
* 使用 JFrame 元件建立一個視窗,然後建立 4 個不同類型的按鈕,再分别添加到視窗上顯示。
*/
public class Demo10_JButton {
public static void main(String[] args) {
JFrame frame=new JFrame("Java按鈕元件示例"); //建立Frame視窗
JPanel jp=new JPanel(); //建立JPanel對象
JButton btn1=new JButton("我是普通按鈕"); //建立JButton對象
JButton btn2=new JButton("我是帶背景顔色按鈕");
JButton btn3=new JButton("我是不可用按鈕");
JButton btn4=new JButton("我是底部對齊按鈕");
jp.add(btn1);
btn2.setBackground(Color.YELLOW); //設定按鈕背景色
jp.add(btn2);
btn3.setEnabled(false); //設定按鈕不可用
jp.add(btn3);
Dimension preferredSize=new Dimension(160, 60); //設定尺寸
btn4.setPreferredSize(preferredSize); //設定按鈕大小
btn4.setVerticalAlignment(SwingConstants.BOTTOM); //設定按鈕垂直對齊方式
jp.add(btn4);
frame.add(jp);
SwingUtils.setCenter(frame);//設定窗體大小600*800并居中
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
三、單行文本框:JTextField
Swing 中使用 JTextField 類實作一個單行文本框,它允許使用者輸入單行的文本資訊。
- 構造方法如下:
- 常用方法有以下這些:
-
以下是一個例子:
在窗體中添加3個文本框
package swing;
import java.awt.Font;
import java.awt.Toolkit;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
/**
* 使用 JPrame 元件建立一個視窗,然後向視窗中添加三個 JTextField 文本框。
*/
public class Demo11_JTextField {
public static void main(String[] args) {
JFrame frame=new JFrame("Java文本框元件示例"); //建立Frame視窗
JPanel jp=new JPanel(); //建立面闆
JTextField txtfield1=new JTextField(); //建立文本框
txtfield1.setText("普通文本框"); //設定文本框的内容
JTextField txtfield2=new JTextField(28);
txtfield2.setFont(new Font("楷體",Font.BOLD,16)); //修改字型樣式
txtfield2.setText("指定長度和字型的文本框");
JTextField txtfield3=new JTextField(30);
txtfield3.setText("居中對齊");
txtfield3.setHorizontalAlignment(JTextField.CENTER); //居中對齊
jp.add(txtfield1);
jp.add(txtfield2);
jp.add(txtfield3);
frame.add(jp);
SwingUtils.setCenter(frame);//設定窗體大小600*800并居中
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
四、文本域元件:JTextArea
文本域與文本框的最大差別就是文本域允許使用者輸入多行文本資訊。
- 構造方法1: JTextArea():建立一個預設的文本域。
- 構造方法2: JTextArea(int rows,int columns):建立一個具有指定行數和列數的文本域。
- 構造方法3: JTextArea(String text):建立一個包含指定文本的文本域。
-
構造方法4: JTextArea(String text,int rows,int
columns):建立一個既包含指定文本,又包含指定行數和列數的多行文本域。
常用方法如下:
- 以下是一個例子: 在窗體中添加一個文本域
package swing;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Toolkit;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
/**
* 使用 JFrame 元件建立一個視窗,再向視窗中添加一個文本域,
* 并将文本域中的文本設定為自動換行,允許顯示滾動條。
* */
public class Demo12_JTextArea {
public static void main(String[] args) {
JFrame frame=new JFrame("Java文本域元件示例"); //建立Frame視窗
JPanel jp=new JPanel(); //建立一個JPanel對象
JTextArea jta=new JTextArea("請輸入内容",7,30);
jta.setLineWrap(true); //設定文本域中的文本為自動換行
jta.setForeground(Color.BLACK); //設定元件的背景色
jta.setFont(new Font("楷體",Font.BOLD,16)); //修改字型樣式
jta.setBackground(Color.YELLOW); //設定按鈕背景色
JScrollPane jsp=new JScrollPane(jta); //将文本域放入滾動視窗
Dimension size=jta.getPreferredSize(); //獲得文本域的首選大小
jsp.setBounds(110,90,size.width,size.height);
jp.add(jsp); //将JScrollPane添加到JPanel容器中
frame.add(jp); //将JPanel容器添加到JFrame容器中
frame.setBackground(Color.LIGHT_GRAY);
SwingUtils.setCenter(frame);//設定窗體大小600*800并居中
frame.setVisible(true);
}
}
五、複選框元件:JCheckBox
一個複選框有選中和未選中兩種狀态,并且可以同時標明多個複選框。
- 構造方法1: JCheckBox():建立一個預設的複選框,在預設情況下既未指定文本,也未指定圖像,并且未被選擇。
- 構造方法2: JCheckBox(String text):建立一個指定文本的複選框。
- 構造方法3: JCheckBox(String text,boolean selected):建立一個指定文本和選擇狀态的複選框。
- 以下是一個例子: 在窗體中添加幾個複選框
package swing;
import java.awt.Font;
import java.awt.Toolkit;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
/**
* 使用 JFmme 元件建立一個視窗,然後使用 JCheckBox 類建立一些複選框。
*/
public class Demo13_JCheckBox {
public static void main(String[] args) {
JFrame frame=new JFrame("Java複選元件示例"); //建立Frame視窗
JPanel jp=new JPanel(); //建立面闆
JLabel label=new JLabel("流行程式設計語言有:");
label.setFont(new Font("楷體",Font.BOLD,16)); //修改字型樣式
JCheckBox chkbox1=new JCheckBox("C#", true); //建立指定文本和狀态的複選框
JCheckBox chkbox2=new JCheckBox("C++"); //建立指定文本的複選框
JCheckBox chkbox3=new JCheckBox("Java"); //建立指定文本的複選框
JCheckBox chkbox4=new JCheckBox("Python"); //建立指定文本的複選框
JCheckBox chkbox5=new JCheckBox("PHP"); //建立指定文本的複選框
JCheckBox chkbox6=new JCheckBox("Perl"); //建立指定文本的複選框
jp.add(label);
jp.add(chkbox1);
jp.add(chkbox2);
jp.add(chkbox3);
jp.add(chkbox4);
jp.add(chkbox5);
jp.add(chkbox6);
frame.add(jp);
SwingUtils.setCenter(frame);//設定窗體大小600*800并居中
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
六、單選按鈕元件:JRadioButton
單選按鈕與複選框類似都有兩種狀态,不同的是一組單選按鈕中隻能有一個處于選中狀态。
JRadioButton 通常位于一個 ButtonGroup 按鈕組中,不在按鈕組中的 JRadioButton 也就失去了單選按鈕的意義在同一個 ButtonGroup 按鈕組中的單選按鈕,隻能有一個單選按鈕被選中。是以,如果建立的多個單選按鈕其初始狀态都是選中狀态,則最先加入 ButtonGroup 按鈕組的單選按鈕的選中狀态被保留,其後加入到 ButtonGroup 按鈕組中的其他單選按鈕的選中狀态被取消。
- 構造方法1: JRadioButton():建立一個初始化為未選擇的單選按鈕,其文本未設定。
- 構造方法2: JRadioButton(Icon icon):建立一個初始化為未選擇的單選按鈕,其具有指定的圖像但無文本。
-
構造方法3: JRadioButton(Icon icon,boolean
selected):建立一個具有指定圖像和選擇狀态的單選按鈕,但無文本。
- 構造方法4: JRadioButton(String text):建立一個具有指定文本但未選擇的單選按鈕。
-
構造方法5: JRadioButton(String text,boolean
selected):建立一個具有指定文本和選擇狀态的單選按鈕。
-
構造方法6: JRadioButton(String text,Icon
icon):建立一個具有指定的文本和圖像并初始化為未選擇的單選按鈕。
-
構造方法7: JRadioButton(String text,Icon icon,boolean
selected):建立一個具有指定的文本、圖像和選擇狀态的單選按鈕。
以下是一個例子:
建立一個選擇季節的單選按鈕組
package swing;
import java.awt.Font;
import java.awt.Toolkit;
import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
/**
* 使用 JFrame 元件建立一個視窗,
* 然後使用 JRadioButton 類建立一個選擇季節的單選按鈕組。
*/
public class Demo14_JRadioButton {
public static void main(String[] args) {
JFrame frame=new JFrame("Java單選元件示例"); //建立Frame視窗
JPanel panel=new JPanel(); //建立面闆
JLabel label1=new JLabel("現在是哪個季節:");
JRadioButton rb1=new JRadioButton("春天"); //建立JRadioButton對象
JRadioButton rb2=new JRadioButton("夏天"); //建立JRadioButton對象
JRadioButton rb3=new JRadioButton("秋天",true); //建立JRadioButton對象
JRadioButton rb4=new JRadioButton("冬天"); //建立JRadioButton對象
label1.setFont(new Font("楷體",Font.BOLD,16)); //修改字型樣式
ButtonGroup group=new ButtonGroup();
//添加JRadioButton到ButtonGroup中
group.add(rb1);
group.add(rb2);
group.add(rb3);
group.add(rb4);
panel.add(label1);
panel.add(rb1);
panel.add(rb2);
panel.add(rb3);
panel.add(rb4);
frame.add(panel);
SwingUtils.setCenter(frame);//設定窗體大小600*800并居中
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
七、下拉清單元件:JComboBox
下拉清單的特點是将多個選項折疊在一起,隻顯示最前面的或被選中的一個。選擇時需要單擊下拉清單右邊的下三角按鈕,這時候會彈出包含所有選項的清單。使用者可以在清單中進行選擇,也可以根據需要直接輸入所要的選項,還可以輸入選項中沒有的内容。
- 構造方法1: JComboBox():建立一個空的 JComboBox 對象。
-
構造方法2: JComboBox(ComboBoxModel aModel):建立一個 JComboBox,其選項取自現有的
ComboBoxModel。
- 構造方法3: JComboBox(Object[] items):建立包含指定數組中元素的 JComboBox。
常用方法如下:
以下是一個例子:
建立一個包含4個選項的下拉框
package swing;
import java.awt.Toolkit;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
/**
* 使用 JFrame 元件建立一個視窗,
* 然後使用 JComboBox 類建立一個包含4個選項的下拉清單框。
*/
public class Demo15_JComboBox {
public static void main(String[] args) {
JFrame frame=new JFrame("Java下拉清單元件示例");
JPanel jp=new JPanel(); //建立面闆
JLabel label1=new JLabel("證件類型:"); //建立标簽
JComboBox cmb=new JComboBox(); //建立JComboBox
cmb.addItem("--請選擇--"); //向下拉清單中添加一項
cmb.addItem("身份證");
cmb.addItem("駕駛證");
cmb.addItem("軍官證");
jp.add(label1);
jp.add(cmb);
frame.add(jp);
SwingUtils.setCenter(frame);//設定窗體大小600*800并居中
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
八、清單框:JList
清單框與下拉清單的差別不僅僅表現在外觀上,當激活下拉清單時,會出現下拉清單框中的内容。但清單框隻是在窗體系上占據固定的大小,如果需要清單框具有滾動效果,可以将清單框放到滾動面闆中。當使用者選擇清單框中的某一項時,按住 Shift 鍵并選擇清單框中的其他項目,可以連續選擇兩個選項之間的所有項目,也可以按住 Ctrl 鍵選擇多個項目。
- 構造方法1: JList():構造一個空的隻讀模型的清單框。
- 構造方法2: JList(ListModel dataModel):根據指定的非 null 模型對象構造一個顯示元素的清單框。
- 構造方法3: JList(Object[] listData):使用 listData 指定的元素構造—個清單框。
- 構造方法4: JList(Vector<?> listData):使用 listData 指定的元素構造一個清單框。
以下是一個例子:
建立一個包含3個選項的清單框
package swing;
import java.awt.Toolkit;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
/**
* 使用 JFmme 元件建立一個視窗,
* 然後使用 JList 類建立一個包含3個選項的清單框。
*/
public class Demo16_JList {
public static void main(String[] args) {
JFrame frame=new JFrame("Java清單框元件示例");
JPanel jp=new JPanel(); //建立面闆
JLabel label1=new JLabel("證件類型:"); //建立标簽
String[] items=new String[]{"身份證","駕駛證","軍官證"};
JList list=new JList(items); //建立JList
jp.add(label1);
jp.add(list);
frame.add(jp);
SwingUtils.setCenter(frame);//設定窗體大小600*800并居中
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
JList 元件在預設情況下支援單選和多選,可以通過 setSelectionMode() 方法來限制選擇行為
- setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION)——允許選擇一個或多個連續的元素。
- setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION)——允許選擇一個連續的元素。