All Downloads are FREE. Search and download functionalities are using the official Maven repository.

anlavn.ui.Mode Maven / Gradle / Ivy

package anlavn.ui;
// Make By Bình An || AnLaVN || KatoVN

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


/**Lớp Mode hỗ trợ thay đổi chế độ từ sáng sang tối, component từ nimbus sang giao diện windows.
 * @author AnLaVN - https://github.com/AnLaVN
 */
public class Mode {
    private static boolean MODE = false;
    private static final LookAndFeel PRE_LF = UIManager.getLookAndFeel();
    private static final String SYS_LF = UIManager.getSystemLookAndFeelClassName();
    private static Color TextDarkMode = Color.decode("#F0F0F0"), TextLightMode = Color.decode("#2C3338");
    private static Color BackDarkMode = Color.decode("#363B41"), BackLightMode = Color.decode("#FFFFFF");
    
    
    /**Sử dụng phương thức này để nhận Chế độ hiện tại.
     * @return true nếu Chế độ là Tối, false nếu Chế độ là Sáng.
     */
    public static boolean getMode() {   return MODE;    }
    
    /**Sử dụng phương thức này để đặt Chế độ cho UI.
     * @param MODE true là Chế độ Tối, false là Chế độ Sáng.
     */
    public static void setMode(boolean MODE) {  
        Mode.MODE = MODE;   
    }
    
    /**Sử dụng phương thức này để lấy màu Văn bản ở Chế độ hiện tại.
     * @return Màu Văn bản ở Chế độ hiện tại
     */
    public static Color getTextColor()      {   return MODE ? TextDarkMode : TextLightMode; }
    
    /**Sử dụng phương thức này để lấy màu văn bản ở Chế độ sáng.
     * @return Màu văn bản ở Chế độ sáng.
     */
    public static Color getTextLightColor() {   return TextLightMode;   }

    /**Sử dụng phương thức này để lấy màu văn bản ở Chế độ ánh tối.
     * @return Màu văn bản ở Chế độ tối.
     */
    public static Color getTextDarkColor()  {   return TextDarkMode;    }
    
    /**Sử dụng phương thức này để lấy màu nền ở Chế độ hiện tại.
     * @return Màu nền ở Chế độ hiện tại
     */
    public static Color getBackColor()      {   return MODE ? BackDarkMode : BackLightMode; }

    /**Sử dụng phương thức này để lấy màu nền ở Chế độ sáng.
     * @return Màu nền ở Chế độ sáng.
     */
    public static Color getBackLightColor() {   return BackLightMode;   }

    /**Sử dụng phương thức này để lấy màu nền ở Chế độ ánh tối.
     * @return Màu nền ở Chế độ tối.
     */
    public static Color getBackDarkColor()  {   return BackDarkMode;    }
    
    /**Sử dụng phương thức này để tùy chỉnh Màu của Văn Bản trong 2 trường hợp Chế Độ Tối và Sáng.
     * @param TextDarkMode là Màu của Văn Bản nếu Chế Độ là Tối, nên là màu sáng.
* @param TextLightMode là Màu của Văn Bản nếu Chế Độ là Sáng, nên là màu tối.
*/ public static void setTextColor(Color TextDarkMode, Color TextLightMode){ Mode.TextDarkMode = TextDarkMode; Mode.TextLightMode = TextLightMode; } /**Sử dụng phương thức này để tùy chỉnh Màu của Nền trong 2 trường hợp Chế Độ Tối và Sáng. * @param BackDarkMode là Màu của Nền nếu Chế Độ là Tối, nên là màu tối.
* @param BackLightMode là Màu của Nền nếu Chế Độ là Sáng, nên là màu sáng.
*/ public static void setBackColor(Color BackDarkMode, Color BackLightMode){ Mode.BackDarkMode = BackDarkMode; Mode.BackLightMode = BackLightMode; } /**Sử dụng phương thức này để thay đổi Chế độ cho các Component. * @param components là danh sách các biến Component cần thay đổi Chế Độ.
*/ public static void setModeComponent(Component... components){ for(Component component : components) setModeComponent(component); } /**Sử dụng phương thức này để thay đổi Chế độ cho một Component. * @param component là biến Component cần thay đổi Chế Độ.
*/ public static void setModeComponent(Component component){ JComponent j = null; if(component instanceof JPanel pan) {j = pan;} if(component instanceof JLabel lbl) {j = lbl;} if(component instanceof JRadioButton rdo) {j = rdo;} if(component instanceof JCheckBox chk) {j = chk;} if(component instanceof JTextField txt) {j = txt;} if(component instanceof JTextPane tpa) {j = tpa;} if(component instanceof JTextArea tar) {j = tar;} if(component instanceof JTable tbl) {j = tbl;} if(component instanceof JButton btn) {j = btn;} if(component instanceof JScrollBar scb) {j = scb;} if(j != null){ if(!(j instanceof JScrollBar)){ j.setForeground ( MODE ? TextDarkMode : TextLightMode );} j.setBackground ( MODE ? BackDarkMode : BackLightMode ); } } /**Sử dụng phương thức này để thay đổi Trình Chọn Tệp thành Giao diện của Windows. * @return một JFileChooser đã thay đổi Giao diện.
*/ public static JFileChooser WFileChooser(){ JFileChooser chooser = null; try { UIManager.setLookAndFeel(SYS_LF); chooser = new JFileChooser(); UIManager.setLookAndFeel(PRE_LF); } catch (IllegalAccessException | UnsupportedLookAndFeelException | InstantiationException | ClassNotFoundException e) { System.out.println("\n!!! Error trying to change Look and Feel of File Chooser. !!!\n\tError code: " + e.toString());} return chooser; } /**Sử dụng phương thức này để thay đổi Hộp Kiểm thành Giao diện của Windows. * @return một JCheckBox đã thay đổi Giao diện.
*/ public static JCheckBox WCheckBox(){ JCheckBox checkbox = null; try { UIManager.setLookAndFeel(SYS_LF); checkbox = new JCheckBox(); UIManager.setLookAndFeel(PRE_LF);} catch (IllegalAccessException | UnsupportedLookAndFeelException | InstantiationException | ClassNotFoundException e) { System.out.println("\n!!! Error trying to change Look and Feel of Check Box. !!!\n\tError code: " + e.toString());} return checkbox; } /**Sử dụng phương thức này để thay đổi Combo Box thành Giao diện của Windows. * @return một JComboBox đã thay đổi Giao diện.
*/ public static JComboBox WComboBox(){ JComboBox combobox = null; try { UIManager.setLookAndFeel(SYS_LF); combobox = new JComboBox(); UIManager.setLookAndFeel(PRE_LF);} catch (IllegalAccessException | UnsupportedLookAndFeelException | InstantiationException | ClassNotFoundException e) { System.out.println("\n!!! Error trying to change Look and Feel of Combo Box. !!!\n\tError code: " + e.toString());} return combobox; } /**Sử dụng phương thức này để hiển thị một hộp thoại thông báo. * @param parentComponent Frame trong đó hộp thoại được hiển thị, nếu null hoặc không có Frame, một Frame mặc định sẽ được sử dụng.
* @param message Object để hiển thị.
*/ public static void WMessage(Component parentComponent, Object message){ WMessage(parentComponent, message, "Message Dialog", INFORMATION_MESSAGE); } /**Sử dụng phương thức này để hiển thị một hộp thoại thông báo, với tất cả các tham số. * @param parentComponent Frame trong đó hộp thoại được hiển thị, nếu null hoặc không có Frame, một Frame mặc định sẽ được sử dụng.
* @param message Object để hiển thị.
* @param title Chuỗi tiêu đề cho hộp thoại.
* @param messageType loại thông báo sẽ được hiển thị:
* ERROR_MESSAGE, INFORMATION_MESSAGE, WARNING_MESSAGE, QUESTION_MESSAGE, hoặc PLAIN_MESSAGE.
*/ public static void WMessage(Component parentComponent, Object message, String title, int messageType){ WMessage(parentComponent, message, title, messageType, null); } /**Sử dụng phương thức này để hiển thị một hộp thoại thông báo, với tất cả các tham số. * @param parentComponent Frame trong đó hộp thoại được hiển thị, nếu null hoặc không có Frame, một Frame mặc định sẽ được sử dụng.
* @param message Object để hiển thị.
* @param title Chuỗi tiêu đề cho hộp thoại.
* @param messageType loại thông báo sẽ được hiển thị:
* ERROR_MESSAGE, INFORMATION_MESSAGE, WARNING_MESSAGE, QUESTION_MESSAGE, hoặc PLAIN_MESSAGE.
* @param icon - một biểu tượng để hiển thị trong hộp thoại giúp người dùng xác định loại thông báo đang được hiển thị. */ public static void WMessage(Component parentComponent, Object message, String title, int messageType, Icon icon){ try { UIManager.setLookAndFeel(SYS_LF); JOptionPane.showMessageDialog(parentComponent, message, title, messageType, icon); UIManager.setLookAndFeel(PRE_LF); } catch (IllegalAccessException | UnsupportedLookAndFeelException | InstantiationException | ClassNotFoundException e) { System.out.println("\n!!! Error trying to change Look and Feel of MessageDialog. !!!\n\tError code: " + e.toString());} } /**Sử dụng phương thức này để hiển thị hộp thoại Xác Nhận với các tùy chọn "Yes, No and Cancel". * @param parentComponent Frame trong đó hộp thoại được hiển thị.
* @param message Object để hiển thị.
* @return một số nguyên cho biết tùy chọn được người dùng chọn. */ public static int WConfirm(Component parentComponent, Object message){ return WConfirm(parentComponent, message, "Confirm Dialog", YES_NO_CANCEL_OPTION); } /**Sử dụng phương thức này để hiển thị hộp thoại Xác Nhận, trong đó số lượng lựa chọn được xác định bởi tham số optionType. * @param parentComponent Frame trong đó hộp thoại được hiển thị.
* @param message Object để hiển thị.
* @param title Chuỗi tiêu đề cho hộp thoại.
* @param optionType một int chỉ định các tùy chọn có sẵn trên hộp thoại:
* YES_NO_OPTION, YES_NO_CANCEL_OPTION hoặc OK_CANCEL_OPTION.
* @return một số nguyên cho biết tùy chọn được người dùng chọn. */ public static int WConfirm(Component parentComponent, Object message, String title, int optionType){ return WConfirm(parentComponent, message, title, optionType, QUESTION_MESSAGE); } /**Sử dụng phương thức này để hiển thị hộp thoại Xác Nhận, với tất cả các tham số và biểu tượng mặc định. * @param parentComponent Frame trong đó hộp thoại được hiển thị.
* @param message Object để hiển thị.
* @param title Chuỗi tiêu đề cho hộp thoại.
* @param optionType một int chỉ định các tùy chọn có sẵn trên hộp thoại:
* YES_NO_OPTION, YES_NO_CANCEL_OPTION hoặc OK_CANCEL_OPTION.
* @param messageType loại thông báo sẽ được hiển thị:
* ERROR_MESSAGE, INFORMATION_MESSAGE, WARNING_MESSAGE, QUESTION_MESSAGE hoặc PLAIN_MESSAGE.
* @return một số nguyên cho biết tùy chọn được người dùng chọn. */ public static int WConfirm(Component parentComponent, Object message, String title, int optionType, int messageType){ return WConfirm(parentComponent, message, title, optionType, messageType, null); } /**Sử dụng phương thức này để hiển thị hộp thoại Xác Nhận, với tất cả các tham số. * @param parentComponent Frame trong đó hộp thoại được hiển thị.
* @param message Object để hiển thị.
* @param title Chuỗi tiêu đề cho hộp thoại.
* @param optionType một int chỉ định các tùy chọn có sẵn trên hộp thoại:
* YES_NO_OPTION, YES_NO_CANCEL_OPTION hoặc OK_CANCEL_OPTION.
* @param messageType loại thông báo sẽ được hiển thị:
* ERROR_MESSAGE, INFORMATION_MESSAGE, WARNING_MESSAGE, QUESTION_MESSAGE hoặc PLAIN_MESSAGE.
* @param icon biểu tượng để hiển thị trong hộp thoại.
* @return một số nguyên cho biết tùy chọn được người dùng chọn. */ public static int WConfirm(Component parentComponent, Object message, String title, int optionType, int messageType, Icon icon) { try { UIManager.setLookAndFeel(SYS_LF); int ConfirmDialog = JOptionPane.showConfirmDialog(parentComponent, message, title, optionType, messageType, icon); UIManager.setLookAndFeel(PRE_LF); return ConfirmDialog; } catch (IllegalAccessException | UnsupportedLookAndFeelException | InstantiationException | ClassNotFoundException e) { System.out.println("\n!!! Error trying to change Look and Feel of ConfirmDialog. !!!\n\tError code: " + e.toString()); throw new RuntimeException(e);} } /**Sử dụng phương thức này để hiển thị hộp thoại Nhập, hiển thị câu hỏi. message. * @param message Object để hiển thị.
* @return thông tin đầu vào của người dùng. */ public static String WInput(Object message){ return WInput(null, message); } /**Sử dụng phương thức này để hiển thị hộp thoại Nhập, hiển thị bên trong Component. * @param parentComponent Thành phần chính cho hộp thoại.
* @param message Object để hiển thị.
* @return thông tin đầu vào của người dùng. */ public static String WInput(Component parentComponent, Object message){ return WInput(parentComponent, message,"Input Dialog" , QUESTION_MESSAGE); } /**Sử dụng phương thức này để hiển thị hộp thoại Nhập, có tittlemessageType. * @param parentComponent Thành phần chính cho hộp thoại.
* @param message Object để hiển thị.
* @param title String tiêu đề để hiển thị trong thanh tiêu đề hộp thoại.
* @param messageType loại tin nhắn sẽ được hiển thị:
* ERROR_MESSAGE, INFORMATION_MESSAGE, WARNING_MESSAGE, QUESTION_MESSAGE hoặc PLAIN_MESSAGE.
* @return thông tin đầu vào của người dùng. */ public static String WInput(Component parentComponent, Object message, String title, int messageType){ try { UIManager.setLookAndFeel(SYS_LF); String InputDialog = JOptionPane.showInputDialog(parentComponent, message, title, messageType); UIManager.setLookAndFeel(PRE_LF); return InputDialog; } catch (IllegalAccessException | UnsupportedLookAndFeelException | InstantiationException | ClassNotFoundException e) { System.out.println("\n!!! Error trying to change Look and Feel of InputDialog. !!!\n\tError code: " + e.toString()); throw new RuntimeException(e);} } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy