Chọn bảng màu trong Java Swing với JColorChooser

JColorChooser cung cấp một bảng màu cho phép người dùng có thể theo tác và lựa chọn một màu bất kỳ trên đó. Nó cung cấp 3 phương thức chính cho phép chúng ta có thể thao tác:

  • Hiển thị bảng màu trên một dialog và trả về màu mà người dùng đã chọn.
  • Hiển thị bảng màu trên một dialog và một ActionListeners sẽ được gọi khi người dùng nhấn vào một Button nào đó trên dialog.
  • Tạo một JColorChooser instance và sử dụng trực tiếp trên một container như JFrame, JPanel, etc.

Khởi tạo JColorChooser

Chúng ta có thể khởi tạo JColorChooser thông qua các constructor sau:

  • JColorChooser() – Khởi tạo JColorChooser với màu khởi tạo ban đầu là trắng.
  • JColorChooser(Color initialColor) – Khởi tạo JColorChooser với màu khởi tạo ban đầu là initialColor.
  • JColorChooser(ColorSelectionModel model) – Khởi tạo JColorChooser với model ColorSelectionModel được chỉ định.

Một số hàm thường sử dụng trong JColorChooser:

  • setColor(Color color) – Đặt màu hiện tại của trình chọn màu thành màu được chỉ định.
  • setColor(int c) – Đặt màu hiện tại của trình chọn màu thành màu được chỉ định dưới dạng số nguyên.
  • setColor(int r, int g, int b) – Đặt màu hiện tại của trình chọn màu thành màu được chỉ định dưới dạng RGB.
  • showDialog(Component cmp, String title, Color init_Color) – Hiển thị hộp thoại chọn màu cho người dùng.
  • setChooserPanels(AbstractColorChooserPanel[] panels) – Chỉ định Bảng màu được sử dụng để chọn giá trị màu.
  • addChooserPanel(AbstractColorChooserPanel panel) – Thêm bảng chọn màu vào bảng chọn màu.
  • setUI(ColorChooserUI ui) – Đặt đối tượng L&F hiển thị thành phần này.
  • setSelectionModel(ColorSelectionModel newModel) – Đặt mô hình có chứa màu đã chọn.
  • setPreviewPanel(JComponent preview) – Đặt bảng xem trước hiện tại.

Hiển thị JColorChooser dạng dialog

Đây là một cách triển khai khá dễ dàng hiển thị một dialog cho người dùng chọn. Nếu họ chọn OK thì dialog sẽ bị ẩn đi và trả về màu mà người dùng đã chọn cho chúng ta xử lý.

import javax.swing.*;
import java.awt.*;

public class Main {
    public static void main(String[] args) {
        Color color = JColorChooser.showDialog(null, "Chon 1 mau", null);

        if (color == null) {
            System.out.println("Ban da bo chon mau");
        } else {
            System.out.println("Ban da chon mau:  " + color);
        }

    }
}

Output

Xử lý sự kiện trong JColorChooser

Tiếp theo chúng ta vẫn sẽ hiển thị bảng màu bằng dialog và lắng nghe xử lý sự kiện khi người dùng nhấp vào nút ok.

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JColorChooser;
import javax.swing.JFrame;

public class Main {
    public static void main(String args[]) {
        JFrame f = new JFrame("JColorChooser Sample");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        final JButton button = new JButton("Chon Mau Nen");

        ActionListener actionListener = new ActionListener() {
            public void actionPerformed(ActionEvent actionEvent) {
                Color initialBackground = button.getBackground();
                Color background = JColorChooser.showDialog(null, "JColorChooser Sample", initialBackground);
                if (background != null) {
                    button.setBackground(background);
                }
            }
        };
        button.addActionListener(actionListener);
        f.add(button, BorderLayout.CENTER);
        f.setSize(300, 200);
        f.setVisible(true);
    }
}

Output

Tùy biến JColorChooser

Mặc định JColorChooser cho phép hiển thị rất nhiều lựa chọn với vô số màu, giả sử dụng ta chỉ muốn tạo ra một bảng chọn màu với 3 màu căn bản như đỏ, xanh xương, xanh lá thì có thể làm như sau:

 

 

 

import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import javax.swing.*;
import javax.swing.colorchooser.AbstractColorChooserPanel;

public class Main {
    public static void main(String[] argv) {
        JColorChooser chooser = new JColorChooser();
        chooser.addChooserPanel(new MyChooserPanel());
        JFrame jFrame = new JFrame();
        jFrame.add(chooser);
        jFrame.setVisible(true);
    }
}

class MyChooserPanel extends AbstractColorChooserPanel {
    public void buildChooser() {
        setLayout(new GridLayout(0, 3));
        makeAddButton("Red", Color.red);
        makeAddButton("Green", Color.green);
        makeAddButton("Blue", Color.blue);
    }

    public void updateChooser() {
    }

    public String getDisplayName() {
        return "MyChooserPanel";
    }

    public Icon getSmallDisplayIcon() {
        return null;
    }
    public Icon getLargeDisplayIcon() {
        return null;
    }
    private void makeAddButton(String name, Color color) {
        JButton button = new JButton(name);
        button.setBackground(color);
        button.setAction(setColorAction);
        add(button);
    }

    Action setColorAction = new AbstractAction() {
        public void actionPerformed(ActionEvent evt) {
            JButton button = (JButton) evt.getSource();

            getColorSelectionModel().setSelectedColor(button.getBackground());
        }
    };
}

Output

Nguồn tham khảo

https://www.geeksforgeeks.org/java-swing-jcolorchooser-class/

http://www.java2s.com/Tutorials/Java/Java_Swing/1350__Java_Swing_JColorChooser.htm

0 0 votes
Article Rating
Subscribe
Notify of
guest
1 Comment
Newest
Oldest Most Voted
Inline Feedbacks
View all comments
1
0
Would love your thoughts, please comment.x
()
x