java實現仿windows 字型設定選項卡執行個體_java

來源:互聯網
上載者:User

想用java做一個像windows裡一樣的txt編輯軟體,涉及到字型設定選項卡,在網上找了很久都沒找到,就生氣啦自己寫一個,現在貼這裡分享一下,下次再遇到這樣的問題就不用自己親自打代碼啦!

package 實驗;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;/** * 字型格式設定對話方塊 */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;// 字型類  private Color color;// 顏色類  Color newColor;  private JFileChooser fileChoose = new JFileChooser();// 檔案選擇類執行個體  private JDialog colorDlg;// 顏色對話方塊  private JColorChooser colorChoose = new JColorChooser();// 顏色選擇類執行個體  private GraphicsEnvironment environment; // 該類中又擷取系統字型的方法;  private String[] fontNameSet;// 字型‘邏輯名'集  // 字型‘樣式'集的字串數組  private String[] fontStyleSet = { "常規", "傾斜", "加粗", "傾斜 加粗" };  // 字型‘樣式'集的常量數組  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[]) {// 主函數    FontFormat a = new FontFormat();    a.setVisible(true);  }  public FontFormat() {// 無參建構函式    super(frame, "李濤—字型設定視窗", true);    frame = new JFrame();    initGUI();  }  public FontFormat(JFrame frame) {// 含參建構函式    super(frame, "李濤—字型設定視窗", true);    this.frame = frame;// 父視窗中必須有一個public的Font對象    // setAlwaysOnTop(true);    initGUI();  }  private void initGUI() {// 字型格式選取器的介面初始化    try {      getContentPane().setLayout(null);      environment = GraphicsEnvironment.getLocalGraphicsEnvironment();// GraphicsEnvironment是一個抽象類別,不能執行個體化,只能用其中的靜態方法擷取一個執行個體      fontNameSet = environment.getAvailableFontFamilyNames();// 擷取系統字型      addMenu();// 加入菜單      initFont();// 初始化字型      // pack();      setSize(380, 337);      setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);      setWindowPos();// 使視窗螢幕置中      setResizable(false);// 大小不可變    } catch (Exception e) {      e.printStackTrace();    }  }  private void initFont() {// 初始化字型    // 設定預設字型格式為父視窗font對向的字型格式    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;// 儲存原來的字型格式      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);// 儲存當前格式      newFont = font;// 儲存原來的字型格式      presTx.setFont(font);// 預覽中設為當前模式    }  }  private void addMenu() {// 加入菜單    // 4個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("預覽:");    presLb.setBounds(151, 150, 120, 80);    presLb.setFont(new java.awt.Font("SimSun", 1, 14));    // 4個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個下拉條--+監聽-----------------------------------------------------------------------------    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);        }      });    }// -------------------------------------------------------------------------------------    // 中英選項(---------------------------------------------------------------------------------    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個按鈕+監聽---------------------------------------------------------------------------------    // 確定按鈕    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();// 抽象類別,通過靜態方法擷取執行個體    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) {// 字型邏輯名列表的按一下滑鼠事件    nameTx.setText(nameLt.getSelectedValue().toString());    font = new Font(nameTx.getText(), font.getStyle(), font.getSize());    presTx.setFont(font);  }  private void styleLtMouseClicked(MouseEvent evt) {// 字型樣式列表的按一下滑鼠事件    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) {// 字型大小列表的滑鼠點擊事件    sizeTx.setText(sizeLt.getSelectedValue().toString());    font = new Font(font.getName(), font.getStyle(),        Integer.parseInt(sizeTx.getText()));    presTx.setFont(font);  }  private void approveActionPerformed(ActionEvent evt) {// 確定按鈕的觸發事件    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對象    newFont = font;// 更新原來儲存格式    newColor = color;// 更新顏色    this.dispose();  }  private void cancelActionPerformed(ActionEvent evt) {// 取消按鈕的觸發事件    this.dispose();  }  private void choseActionPerformed(ActionEvent evt) {// 顏色選擇觸發事件    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 {// 重寫顏色按鈕點擊監聽類覆蓋介面ActionListener    public void actionPerformed(ActionEvent e) {      Color c = colorChoose.getColor();      color = c;      presTx.setForeground(c);      presTx.repaint();    }  }}

效果如下:

希望本文所述對你有所協助,java仿windows 字型設定選項卡內容就給大家介紹到這裡了。希望大家繼續關注我們的網站!想要學習java可以繼續關注本站。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.