Nội dung Giới thiệu về Swing Những ñặc ñiểm của Swing Các thành phần GUI thông dụng của Swing... Giới thiệu Swing 1 AWT Abstract Windows Toolkit Java 1 ðược gắn với platform xác ñịnh
Trang 1Chương 6: Lập trình GUI (tt)
GVLT: Trần Anh Dũng
Trang 2Nội dung
Giới thiệu về Swing
Những ñặc ñiểm của Swing
Các thành phần GUI thông dụng của Swing
Trang 3Giới thiệu Swing (1)
AWT (Abstract Windows Toolkit)
Java 1
ðược gắn với platform xác ñịnh
Thích hợp với việc phát triển các ứng dụng GUI ñơn giản
Swing
Java 2
Không gắn với platform cố ñịnh
Mạnh, ña năng, linh hoạt
Trang 4Giới thiệu Swing (2)
Là một gói nằm trong thư viện JFC (Java Foundation
Classes), gồm nhiều lớp (classes) và giao diện(interfaces) hỗ trợ mạnh mẽ cho việc lập trình giao diện
Trang 5Những ñặc ñiểm của Swing (1)
Cảm quan (Look & Feels)
Khả năng viết những cảm quan (Look & Feels) chomỗi thành phần, thậm chí thay ñổi cảm quan vào thờiñiểm runtime
Swing có khả năng thể hiện nhiều L&F khác nhau vàhiện tại hỗ trợ các L&F bao gồm Metal (mặc ñịnh),
Motif và Windows
Trang 6Những ñặc ñiểm của Swing (2)
Swing sử dụng kiến trúc Model - View - Controller(MVC)
Swing có rất nhiều những thành phần mới
Table, Tree, Slider, Progress Bar, Spinner, Internalframe và Text
Các thành phần Swing có các Tooltip ñặt bên trênchúng Bạn có thể tùy chọn các sự kiện bàn phím chocác thành phần, ñịnh nghĩa chúng hoạt ñộng như thếnào với những phím nóng ñã cho
Trang 7AWT & Swing
AWT vẫn ñược hỗ trợ trong Java 2
Các thành phần trong thư viện Swing không thể thay tất
cả các thành phần trong thư viện AWT
Chúng chỉ thay thế một phần của AWT như: Label,Button, TextFeild, Panel
Các lớp trợ giúp khác trong AWT như: Graphics,Color, Font, FontMetrics,… vẫn không thay ñổi
Các thành phần Swing sử dụng mô hình sử lý sự kiệncủa AWT
Trang 8Sơ ñồ phân cấp javax.swing
Trang 9JLabel
Trang 12JLabel
JLabel (Icon img): Only Icon will be used for label
JLabel (String str): Only text will be used for label
JLabel (String str, Icon img, int align): Label will haveboth text and icon Alignment is specified by the alignargument and can be LEFT, RIGHT, CENTER,LEADING or TRAILING These are constants and aredefined in SwingConstant interface
l.setToolTipText(“ToolTip");
Trang 15JCheckBox(String text, boolean selected)
JCheckBox(String text, Icon icon)
JCheckBox(String text, Icon icon, boolean selected)
Trang 16JRadioButton(String text, boolean selected)
JRadioButton(String text, Icon icon)
JRadioButton(String text, Icon icon, boolean selected)
Trang 17JFrame f = new JFrame("My frame");
String[ ] label = {"ASM","Pascal","C\\C++","VB","Java"};JList l = new JList(label);
l.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);ScrollPane s = new ScrollPane();
s.add(l);
f.getContentPane().add(s);
f.setSize(100,100);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setVisible(true);
JFrame f = new JFrame("My frame");
String[ ] label = {"ASM","Pascal","C\\C++","VB","Java"};JList l = new JList(label);
l.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);ScrollPane s = new ScrollPane();
s.add(l);
f.getContentPane().add(s);
f.setSize(100,100);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setVisible(true);
Trang 18JFrame f = new JFrame("My frame");
JComboBox com = new JComboBox();
JFrame f = new JFrame("My frame");
JComboBox com = new JComboBox();
Trang 19JFrame f = new JFrame("My frame");
String[ ] label={"ASM","Pascal","C\\C++","VB","Java"};
JButton[ ] b = new JButton[label.length];
JTabbedPane p = new JTabbedPane();
JButton[ ] b = new JButton[label.length];
JTabbedPane p = new JTabbedPane();
Trang 20String[ ] columnName = {"ID","Name","Company","Rank"};
JTable t = new JTable(dat,columnName);
JScrollPane s = new JScrollPane(t);
String[ ] columnName = {"ID","Name","Company","Rank"};
JTable t = new JTable(dat,columnName);
JScrollPane s = new JScrollPane(t);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Trang 21String[ ] columnName = {"ID","Name","Company","Rank"};
JTable t = new JTable(dat,columnName);
JScrollPane s = new JScrollPane(t); f.add(s);
JComboBox c = new JComboBox(new String[]{"Low","High","Extremely"}); TableColumn rankColumn = t.getColumn("Rank");
rankColumn.setCellEditor( new DefaultCellEditor((c));
String[ ] columnName = {"ID","Name","Company","Rank"};
JTable t = new JTable(dat,columnName);
JScrollPane s = new JScrollPane(t); f.add(s);
JComboBox c = new JComboBox(new String[]{"Low","High","Extremely"}); TableColumn rankColumn = t.getColumn("Rank");
rankColumn.setCellEditor( new DefaultCellEditor((c));
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Trang 22Every row in the hierarchy is termed as a node.
When the nodes are clicked
Trang 23Chỉ có thể ñặt các menubar vào trong các
Frame/JFrame, Mỗi Frame chỉ chứa duy nhất một
Trang 24Cấu trúc một hệ menu
MenuBar Các Menu
Thanh
MenuItem
Trang 25Các lớp liên quan ñến menu
Trang 26Ví dụ
MenuItem hay JMenuItem
MenuBar hay JMenuBar
Trang 29Lớp java.awt.event.KeyEvent ñịnh nghĩa sẵn các phím
Ví dụ thiết lập phím nóng cho MenuItem:
mnuNew.setShortcut(CtrlN); // Ctrl + N
mnuOpen.setShortcut( new MenuShortcut ( KeyEvent.VK_O ));
Trang 30Ví dụ
Chương trình minh họa cách thiết lập menu cho ứngdụng:
MenuDemo
Trang 33JProgressBar
Trang 34JLabel l = new JLabel("Enter a score out of 1000");
JProgressBar pbar1, pbar2;
JButton done = new JButton("Done");
JTextField tf = new JTextField(10);
public static final int MAXSCORE = 1000;
JLabel l = new JLabel("Enter a score out of 1000");
JProgressBar pbar1, pbar2;
JButton done = new JButton("Done");
JTextField tf = new JTextField(10);
public static final int MAXSCORE = 1000;
//….
Trang 36Progress Bars
public void actionPerformed(ActionEvent e) {
if(e.getSource().equals(done)) {
String score = tf.getText();
int scoreval = Integer.parseInt(score);
pbar2 = new JProgressBar(0, MAXSCORE); pbar2.setValue(scoreval);
pbar2.setStringPainted(true);
f.getContentPane().add(pbar2);
f.validate();
} }
public static void main(String[] args) {
public void actionPerformed(ActionEvent e) {
if(e.getSource().equals(done)) {
String score = tf.getText();
int scoreval = Integer.parseInt(score);
pbar2 = new JProgressBar(0, MAXSCORE); pbar2.setValue(scoreval);
pbar2.setStringPainted(true);
f.getContentPane().add(pbar2);
f.validate();
} }
public static void main(String[] args) {
Trang 38JOptionPane
Trang 39messageType: Defines the style of the message TheLook and Feel manager may lay out the dialog differentlydepending on this value, and will often provide a defaulticon The possible values are:
Trang 40optionType: Defines the set of option buttons that appear
at the bottom of the dialog box:
YES_NO_OPTION
Trang 41When one of the showXxxDialog methods returns an
integer, the possible values are:
Trang 43JSpinner has an editor that displays the values andbuttons on the right hand side to move through thevalues
SpinnerModel is used to represent a sequence of values
SpinnerModel model = new SpinnerDateModel();
SpinnerModel model = new SpinnerNumberModel();
SpinnerModel model = new SpinnerListModel(List values);
SpinnerModel model = new SpinnerListModel(Object[] values);
JSpinner spinner1 = new JSpinner(model);
Trang 44Cho phép người sử dụng chọn giá trị nguyên trong mộtvùng giá trị xác ñịnh
JSlider(): Creates a horizontal slider with the range 0
to 100 and an initial value of 50
Trang 45Một số constructors:
JSlider(int orientation): Creates a slider using thespecified orientation with the range 0 to 100 and aninitial value of 50
JSlider(int min, int max): Creates a horizontal sliderusing the specified min and max with an initial valueequal to the average of the min plus max
JSlider(int min, int max, int value)
JSlider(int orientation, int min, int max, int value):
Creates a slider with the specified orientation and the
Trang 46Một số methods:
void setMajorTickSpacing(int n): This method sets themajor tick spacing
void setMaximum(int maximum)
void setMinimum(int minimum)
void setMinorTickSpacing(int n): This method sets theminor tick spacing
void setOrientation(int orientation): Set the scrollbarsorientation to either VERTICAL or HORIZONTAL
Trang 47Ứng dụng MDI Ứng dụng MDI
Trang 48Lớp Color
Thiết lập màu cho các thành phần GUI bằng cách sửdung lớp java.awt.Color
Các màu ñược tạo từ 3 màu cơ bản là red, green, blue
gọi là hệ màu RGB (RGB model)
Color c = new Color(r, g, b);
Ví dụ:
Color c = new Color(228, 100, 255);
Sử dụng các phương thức tương ứng ñể thiết lập màubackground và foreground cho các thành phần
Trang 49Lớp Font
Thiết lập Font cho các thành phần
Font myFont = Font(name, style, size);
Ví dụ:
Font font1 = new Font(“Arial", Font.BOLD, 16);
Font font2 = new Font("Serif", Font.BOLD + Font.ITALIC,12);
Trang 50Ví dụ: Tìm tất cả tên font phổ dụng
import java.awt.GraphicsEnvironment;
public class testAllFonts {
public static void main(String[] args) {
GraphicsEnvironment e =
GraphicsEnvironment.getLocalGraphicsEnvironment();
String[] fontnames = e.getAvailableFontFamilyNames();
for ( int i = 0; i < fontnames.length; i++)
System.out.println(fontnames[i]);
Trang 51Lớp FontMetrics
Trang 52Một số phương thức thông dụng
public int getAscent()
public int getDescent()
public int getLeading()
public int getHeight()
public int stringWidth(String str)
Ví dụ: Hiển thị chuỗi “Welcome to Java” canh giữa trong
Lớp FontMetrics
Trang 53Lớp Graphics (1)
drawLine(x1, y1, x2, y2);
drawRect(x, y, w, h);
fillRect(x, y, w, h);
drawRoundRect(x, y, w, h, aw, ah);
fillRoundRect(x, y, w, h, aw, ah);
Trang 54drawOval(x, y, w, h);
fillOval(x, y, w, h);
drawArc(x, y, w, h, angle1, angle2);
fillArc(x, y, w, h, angle1, angle2);
Lớp Graphics (2)
Trang 56Tìm hiểu thư viện javax.swing
Tìm hiểu các phương thức trong lớp Graphics
Xây dựng dứng dụng vẽ ñường cong hình sin
Xây dựng ứng dụng vẽ ñồng hồ
Bài tập
Trang 57Hỏi & ñáp