java實(shí)現(xiàn)仿windows 字體設(shè)置選項(xiàng)卡實(shí)例
想用java做一個(gè)像windows里一樣的txt編輯軟件,涉及到字體設(shè)置選項(xiàng)卡,在網(wǎng)上找了很久都沒(méi)找到,就生氣啦自己寫(xiě)一個(gè),現(xiàn)在貼這里分享一下,下次再遇到這樣的問(wèn)題就不用自己親自打代碼啦!
package 實(shí)驗(yàn); import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.*; import javax.swing.border.BevelBorder; /** * 字體格式設(shè)置對(duì)話框 */ public class FontFormat extends JDialog { private JLabel nameLb; private JLabel styleLb; private JLabel sizeLb; private JLabel presLb; private JTextField nameTx; private JTextField styleTx; private JTextField sizeTx; private JTextField presTx; private JList nameLt; private JList styleLt; private JList sizeLt; private JScrollPane jScrollPane1; private JScrollPane jScrollPane2; private JScrollPane jScrollPane3; private JButton approve; private JButton cancel; private JButton chose; private JRadioButton[] language = new JRadioButton[2]; private ButtonGroup languageg; private String Slanguage[] = { new String("李濤"), new String("ABC") }; private static JFrame frame; public Font font, newFont;// 字體類(lèi) private Color color;// 顏色類(lèi) Color newColor; private JFileChooser fileChoose = new JFileChooser();// 文件選擇類(lèi)實(shí)例 private JDialog colorDlg;// 顏色對(duì)話框 private JColorChooser colorChoose = new JColorChooser();// 顏色選擇類(lèi)實(shí)例 private GraphicsEnvironment environment; // 該類(lèi)中又獲取系統(tǒng)字體的方法; private String[] fontNameSet;// 字體‘邏輯名'集 // 字體‘樣式'集的字符串?dāng)?shù)組 private String[] fontStyleSet = { "常規(guī)", "傾斜", "加粗", "傾斜 加粗" }; // 字體‘樣式'集的常量數(shù)組 private Integer[] fontCon = { Font.PLAIN, Font.ITALIC, Font.BOLD, Font.BOLD | Font.ITALIC }; // 字體‘大小'集 private String[] fontSizeSet = { "6", "7", "8", "9", "10", "11", "12", "14", "16", "18", "20", "22", "24", "26", "28", "36", "48", "72" }; public static void main(String args[]) {// 主函數(shù) FontFormat a = new FontFormat(); a.setVisible(true); } public FontFormat() {// 無(wú)參構(gòu)造函數(shù) super(frame, "李濤—字體設(shè)置窗口", true); frame = new JFrame(); initGUI(); } public FontFormat(JFrame frame) {// 含參構(gòu)造函數(shù) super(frame, "李濤—字體設(shè)置窗口", true); this.frame = frame;// 父窗口中必須有一個(gè)public的Font對(duì)象 // setAlwaysOnTop(true); initGUI(); } private void initGUI() {// 字體格式選擇器的界面初始化 try { getContentPane().setLayout(null); environment = GraphicsEnvironment.getLocalGraphicsEnvironment();// GraphicsEnvironment是一個(gè)抽象類(lèi),不能實(shí)例化,只能用其中的靜態(tài)方法獲取一個(gè)實(shí)例 fontNameSet = environment.getAvailableFontFamilyNames();// 獲取系統(tǒng)字體 addMenu();// 加入菜單 initFont();// 初始化字體 // pack(); setSize(380, 337); setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); setWindowPos();// 使窗口屏幕居中 setResizable(false);// 大小不可變 } catch (Exception e) { e.printStackTrace(); } } private void initFont() {// 初始化字體 // 設(shè)置默認(rèn)字體格式為父窗口font對(duì)向的字體格式 if (frame.getFont() == null) { nameTx.setText(fontNameSet[0]); styleTx.setText(fontStyleSet[0]); sizeTx.setText("12"); nameLt.setSelectedValue(fontNameSet[0], true); styleLt.setSelectedIndex(0); sizeLt.setSelectedValue("12", true); font = new Font(fontNameSet[0], fontCon[0], 12); newFont = font;// 保存原來(lái)的字體格式 presTx.setFont(font); // JOptionPane.showMessageDialog(null, "ccac"); } else { int idxStyle = 0; for (int i = 0; i < fontCon.length; i++) { if (fontCon[i] == frame.getFont().getStyle()) idxStyle = i; } nameTx.setText(frame.getFont().getName());// 改text styleTx.setText(fontStyleSet[idxStyle]); sizeTx.setText("" + frame.getFont().getSize()); nameLt.setSelectedValue(frame.getFont().getName(), true);// 改list顯示 styleLt.setSelectedIndex(idxStyle); sizeLt.setSelectedValue("" + frame.getFont().getSize(), true); font = new Font(fontNameSet[0], fontCon[0], 12);// 保存當(dāng)前格式 newFont = font;// 保存原來(lái)的字體格式 presTx.setFont(font);// 預(yù)覽中設(shè)為當(dāng)前模式 } } private void addMenu() {// 加入菜單 // 4個(gè)lable--------------------------------------------------------------------------------- nameLb = new JLabel(); getContentPane().add(nameLb); nameLb.setText("字體:"); nameLb.setBounds(10, 14, 120, 26); nameLb.setFont(new java.awt.Font("SimSun", 1, 14)); styleLb = new JLabel(); getContentPane().add(styleLb); styleLb.setText("字型:"); styleLb.setBounds(151, 14, 120, 23); styleLb.setFont(new java.awt.Font("SimSun", 1, 14)); sizeLb = new JLabel(); getContentPane().add(sizeLb); sizeLb.setText("大?。?); sizeLb.setBounds(275, 14, 79, 24); sizeLb.setFont(new java.awt.Font("SimSun", 1, 14)); presLb = new JLabel(); getContentPane().add(presLb); presLb.setText("預(yù)覽:"); presLb.setBounds(151, 150, 120, 80); presLb.setFont(new java.awt.Font("SimSun", 1, 14)); // 4個(gè)textfield--------------------------------------------------------------------------------- nameTx = new JTextField(); nameTx.setEditable(false); getContentPane().add(nameTx); nameTx.setBounds(10, 42, 120, 22); styleTx = new JTextField(); styleTx.setEditable(false); getContentPane().add(styleTx); styleTx.setBounds(151, 42, 100, 21); sizeTx = new JTextField(); sizeTx.setEditable(false); getContentPane().add(sizeTx); sizeTx.setBounds(275, 42, 79, 22); presTx = new JTextField(); presTx.setEditable(false); getContentPane().add(presTx); presTx.setBounds(151, 200, 203, 61); presTx.setText(Slanguage[1]); // 3個(gè)下拉條--+監(jiān)聽(tīng)----------------------------------------------------------------------------- jScrollPane1 = new JScrollPane(); getContentPane().add(jScrollPane1); jScrollPane1.setBounds(10, 74, 120, 210); { ListModel fontNameModel = new DefaultComboBoxModel(fontNameSet); nameLt = new JList(); jScrollPane1.setViewportView(nameLt); nameLt.setModel(fontNameModel); nameLt.setBounds(274, 193, 90, 86); nameLt.setBorder(BorderFactory .createEtchedBorder(BevelBorder.LOWERED)); nameLt.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent evt) { nameLtMouseClicked(evt); } }); } jScrollPane2 = new JScrollPane(); getContentPane().add(jScrollPane2); jScrollPane2.setBounds(151, 74, 100, 103); { ListModel fontStyleModel = new DefaultComboBoxModel(fontStyleSet); styleLt = new JList(); jScrollPane2.setViewportView(styleLt); styleLt.setModel(fontStyleModel); styleLt.setBounds(310, 215, 70, 102); styleLt.setBorder(BorderFactory .createEtchedBorder(BevelBorder.LOWERED)); styleLt.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent evt) { styleLtMouseClicked(evt); } }); } jScrollPane3 = new JScrollPane(); getContentPane().add(jScrollPane3); jScrollPane3.setBounds(275, 75, 79, 100); { ListModel fontSizeModel = new DefaultComboBoxModel(fontSizeSet); sizeLt = new JList(); jScrollPane3.setViewportView(sizeLt); sizeLt.setModel(fontSizeModel); sizeLt.setBounds(300, 218, 54, 102); sizeLt.setBorder(BorderFactory .createEtchedBorder(BevelBorder.LOWERED)); sizeLt.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent evt) { sizeLtMouseClicked(evt); } }); }// ------------------------------------------------------------------------------------- // 中英選項(xiàng)(--------------------------------------------------------------------------------- languageg = new ButtonGroup(); language[0] = new JRadioButton("中"); getContentPane().add(language[0]); language[0].setSelected(false);// 初始化顯示 language[0].setBounds(271, 179, 40, 20); language[0].setFont(new java.awt.Font("SimSun", 1, 12)); languageg.add(language[0]); language[0].addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { presTx.setText(Slanguage[0]); } }); language[1] = new JRadioButton("英"); getContentPane().add(language[1]); language[1].setSelected(true); language[1].setBounds(321, 179, 40, 20); language[1].setFont(new java.awt.Font("SimSun", 1, 12)); languageg.add(language[1]); language[1].addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { presTx.setText(Slanguage[1]); } }); // 3個(gè)按鈕+監(jiān)聽(tīng)--------------------------------------------------------------------------------- // 確定按鈕 approve = new JButton(); getContentPane().add(approve); approve.setText("確定"); approve.setBounds(151, 265, 67, 20); approve.setFont(new java.awt.Font("KaiTi_GB2312", 1, 12)); approve.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { approveActionPerformed(evt); } }); // 取消按鈕 cancel = new JButton(); getContentPane().add(cancel); cancel.setText("取消"); cancel.setBounds(219, 265, 67, 20); cancel.setFont(new java.awt.Font("KaiTi_GB2312", 1, 12)); cancel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { cancelActionPerformed(evt); } }); // 顏色選擇按鈕 chose = new JButton(); getContentPane().add(chose); chose.setText("顏色"); chose.setBounds(287, 265, 67, 20); chose.setFont(new java.awt.Font("KaiTi_GB2312", 1, 12)); chose.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { choseActionPerformed(evt); } });// ------------------------------------------------------------------------- } private void setWindowPos() {// 窗口居中 Toolkit kit = Toolkit.getDefaultToolkit();// 抽象類(lèi),通過(guò)靜態(tài)方法獲取實(shí)例 Dimension frameSize = new Dimension(), screenSize = kit.getScreenSize(); // 獲取屏幕的大小 getSize(frameSize); // 獲取窗口大小 setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2); } private void nameLtMouseClicked(MouseEvent evt) {// 字體邏輯名列表的鼠標(biāo)單擊事件 nameTx.setText(nameLt.getSelectedValue().toString()); font = new Font(nameTx.getText(), font.getStyle(), font.getSize()); presTx.setFont(font); } private void styleLtMouseClicked(MouseEvent evt) {// 字體樣式列表的鼠標(biāo)單擊事件 String temp = styleLt.getSelectedValue().toString(); styleTx.setText(temp); int index = 0; while (index < 4 && !fontStyleSet[index].equals(temp)) { index++; } font = new Font(font.getName(), fontCon[index], font.getSize()); presTx.setFont(font); } private void sizeLtMouseClicked(MouseEvent evt) {// 字體大小列表的鼠標(biāo)點(diǎn)擊事件 sizeTx.setText(sizeLt.getSelectedValue().toString()); font = new Font(font.getName(), font.getStyle(), Integer.parseInt(sizeTx.getText())); presTx.setFont(font); } private void approveActionPerformed(ActionEvent evt) {// 確定按鈕的觸發(fā)事件 String name = nameTx.getText(); int style = fontCon[styleLt.getSelectedIndex()]; int size = Integer.parseInt(sizeTx.getText()); font = new Font(name, style, size); frame.setFont(font); // 父窗口的Font對(duì)象 newFont = font;// 更新原來(lái)保存格式 newColor = color;// 更新顏色 this.dispose(); } private void cancelActionPerformed(ActionEvent evt) {// 取消按鈕的觸發(fā)事件 this.dispose(); } private void choseActionPerformed(ActionEvent evt) {// 顏色選擇觸發(fā)事件 if (colorDlg == null) { colorDlg = JColorChooser.createDialog(FontFormat.this, "Select Text Color", true, colorChoose, new ColorOKListener(), null); } colorChoose.setColor(color = presTx.getForeground()); colorDlg.setVisible(true); } class ColorOKListener implements ActionListener {// 重寫(xiě)顏色按鈕點(diǎn)擊監(jiān)聽(tīng)類(lèi)覆蓋接口ActionListener public void actionPerformed(ActionEvent e) { Color c = colorChoose.getColor(); color = c; presTx.setForeground(c); presTx.repaint(); } } }
效果如下:
希望本文所述對(duì)你有所幫助,java仿windows 字體設(shè)置選項(xiàng)卡內(nèi)容就給大家介紹到這里了。希望大家繼續(xù)關(guān)注我們的網(wǎng)站!想要學(xué)習(xí)java可以繼續(xù)關(guān)注本站。
相關(guān)文章
springboot2.x只需兩步快速整合log4j2的方法
這篇文章主要介紹了springboot2.x只需兩步快速整合log4j2的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05MyBatis Oracle 自增序列的實(shí)現(xiàn)方法
這篇文章給大家分享MyBatis Oracle 自增序列的實(shí)現(xiàn)方法及mybatis配置oracle的主鍵自增長(zhǎng)的方法,非常不錯(cuò)具有一定的參考借鑒價(jià)值,感興趣的朋友一起看看吧2016-11-11Java操作IO對(duì)象流進(jìn)行數(shù)據(jù)的讀寫(xiě)
這篇文章主要介紹了Java操作IO對(duì)象流進(jìn)行數(shù)據(jù)的讀寫(xiě),本文通過(guò)例子逐步介紹了java如何操作IO流,和文字解析,需要的朋友可以參考下2021-07-07如何基于java向mysql數(shù)據(jù)庫(kù)中存取圖片
這篇文章主要介紹了如何基于java向mysql數(shù)據(jù)庫(kù)中存取圖片,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02java 文件鎖的簡(jiǎn)單實(shí)現(xiàn)
這篇文章主要介紹了java 文件鎖的簡(jiǎn)單實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2017-07-0729個(gè)要點(diǎn)幫你完成java代碼優(yōu)化
本文給大家分享的是個(gè)人總結(jié)的29個(gè)java優(yōu)化需要注意的地方,非常的全面細(xì)致,推薦給大家,有需要的小伙伴可以參考下2015-03-03idea報(bào)錯(cuò)之找不到符號(hào):類(lèi)的問(wèn)題及解決
這篇文章主要介紹了idea報(bào)錯(cuò)之找不到符號(hào):類(lèi)的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12idea中增強(qiáng)for循環(huán)提示unexpected token問(wèn)題
這篇文章主要介紹了idea中增強(qiáng)for循環(huán)提示unexpected token問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01