Java Swing – Các component cơ bản – phần 2

5/5 - (2 votes)

Trong phần này chúng ta tiếp tục tìm hiểu về một số component trong Java Swing là JList, JTextAreaJTextPane.

JList

JList được dùng để hiển thi một danh sách các đối tượng và cho phép chọn một hoặc nhiều đối tượng.

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GraphicsEnvironment;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;


public class ListExample extends JFrame {

    private JLabel label;
    private JList list;


    public ListExample() {

        initUI();
    }

    private void initUI() {

        JPanel panel = new JPanel();
        panel.setLayout(new BorderLayout());
        panel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));

        GraphicsEnvironment ge =
            GraphicsEnvironment.getLocalGraphicsEnvironment();

        String[] fonts = ge.getAvailableFontFamilyNames();

        list = new JList(fonts);
        list.addListSelectionListener(new ListSelectionListener() {
            @Override
            public void valueChanged(ListSelectionEvent e) {
                String name = (String) list.getSelectedValue();
                Font font = new Font(name, Font.PLAIN, 12);
                label.setFont(font);                
            }
        });

        JScrollPane pane = new JScrollPane();
        pane.getViewport().add(list);
        pane.setPreferredSize(new Dimension(250, 200));
        panel.add(pane);

        label = new JLabel("War is Hell");
        label.setFont(new Font("Serif", Font.PLAIN, 12));
        add(label, BorderLayout.SOUTH);

        add(panel);

        pack();
        setTitle("Component Example");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
    }

    public static void main(String[] args) {
        
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                ListExample ex = new ListExample();
                ex.setVisible(true);
            }
        });
    }
}

Chúng ta tạo một JList hiển thị toàn bộ font chữ có trong máy tính và một JLabel để hiển thị font chữ đó.

GraphicsEnvironment ge = 
    GraphicsEnvironment.getLocalGraphicsEnvironment();

String[] fonts = ge.getAvailableFontFamilyNames();

Đầu tiên chúng ta lấy bộ font chữ trong máy thông qua lớp GraphicsEnvironment.

list = new JList(fonts);

Tiếp theo chúng ta tạo đối tượng JList.

String name = (String) list.getSelectedValue();
Font font = new Font(name, Font.PLAIN, 12);
label.setFont(font);

Khi đã lấy được font rồi thì chúng ta thiết lập font đó cho JLabel.

JScrollPane pane = new JScrollPane();
pane.getViewport().add(list);

Mặc định JList không có thanh trượt, muốn trượt được thì bạn phải đưa vào một đối tượng JScrollPane.

aaa

JTextArea

import java.awt.BorderLayout;
import java.awt.Dimension;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;

public class TextAreaExample extends JFrame {

    public TextAreaExample() {
        
        initUI();
    }

    private void initUI() {

        JPanel panel = new JPanel();
        panel.setLayout(new BorderLayout());
        panel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));

        JScrollPane pane = new JScrollPane();
        JTextArea area = new JTextArea();

        area.setLineWrap(true);       
        area.setBorder(BorderFactory.createEmptyBorder(8, 8, 8, 8));

        pane.getViewport().add(area);
        panel.add(pane);

        add(panel);

        setTitle("Component Example");
        setSize(new Dimension(350, 300));
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
    }

    public static void main(String[] args) {

        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                TextAreaExample ex = new TextAreaExample();
                ex.setVisible(true);
            }
        });
    }
}

JTextArea cho phép tạo các ô gõ văn bản.

area.setLineWrap(true);

Phương thức setLineWrap() cho phép các dòng text tự động xuống dòng khi vượt quá kích thước của TextArea.

pane.getViewport().add(area);

Cũng giống như JList, mặc định JTextArea không thể cuộn được, chúng ta phải đưa chúng vào một đối tượng JScrollPane.

Capture

JTextPane

JTextPane là một component cấp cao dùng để hiển thị text. JTextPane cung cấp nhiều phương thức định dạng text và có thể dùng để hiển thị nguyên cả một trang HTML.

package com.javaswingtut;

import java.awt.BorderLayout;

import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.SwingUtilities;

public class TextPaneExample extends JFrame {

    JTextPane textPane;

    public TextPaneExample() {

        initUI();
    }

    private void initUI() {

        JPanel panel = new JPanel();
        panel.setLayout(new BorderLayout());
        panel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));

        JScrollPane pane = new JScrollPane();
        textPane = new JTextPane();

        textPane.setContentType("text/html");
        textPane.setEditable(false);

        textPane.setBorder(BorderFactory.createEmptyBorder(8, 8, 8, 8));

        loadFile();

        pane.getViewport().add(textPane);
        panel.add(pane);

        add(panel);
        pack();

        setTitle("JTextPane");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
    }

    private void loadFile() {

        try {
            String cd = System.getProperty("user.dir") + "/";
            textPane.setPage("File:///" + cd + "/src/com/javaswingtut/phocode.html");
        } catch (IOException ex) {
            System.err.println("Cannot set page");
        }
    }

    public static void main(String[] args) {

        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                TextPaneExample ex = new TextPaneExample();
                ex.setVisible(true);
            }
        });
    }
}

Chúng ta sẽ tạo một JTextPane và hiển thị một trang HTML lên đó.

<html>
<head>
    <title>Welcome to Pho Code</title>
</head>
<body>

    <h2>JTextPane Example</h2>
    <b>Pho Code</b> provides tutorials on various areas such as GUI, Graphics, Programming Language.
    <p>The website's mission is to provide quick and easy to understand tutorials.</p>   
</body>
</html>
aaa
5 1 vote
Article Rating
Subscribe
Thông báo cho tôi qua email khi
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Comments
Inline Feedbacks
View all comments