在运行时更改字体 [英] Change Font at runtime

查看:230
本文介绍了在运行时更改字体的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

请问是否还有另外一种方法,在运行时改变Font作为使用FontUIResource,整个AWT / Swing GUI,而没有任何关于JComponents的局部变量和类型的知识/兴趣



$ b $ $ $ $ $ $ $ $ import import java.awt。*;
import java.awt.event。*;
import java.util.Locale;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing。*;
import javax.swing.plaf.FontUIResource;
import javax.swing.plaf.basic.BasicComboBoxRenderer;

public class SystemFontDisplayer extends JFrame {

private static final long serialVersionUID = 1L;
private JFrame frame = new JFrame(Nimbus UIDeafaults and Font);
私人JComboBox fontsBox;
private javax.swing.Timer timer = null;
private JButton testButton = new JButton(testButton);
private JTextField testTextField = new JTextField(testTextField);
private JLabel testLabel = new JLabel(testLabel);
$ b $ public SystemFontDisplayer(){
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
String [] fontFamilyNames = ge.getAvailableFontFamilyNames(Locale.getDefault());
fontsBox = new JComboBox(fontFamilyNames);
fontsBox.setSelectedItem(0);
fontsBox.setRenderer(new ComboRenderer());
(new ItemListener(){

@Override
public void itemStateChanged ();
final String fontName = fontsBox.getSelectedItem()。toString();
fontsBox.setFont(new Font(fontName,Font.PLAIN,16));
start();
}
}
});
fontsBox.setSelectedItem(0);
fontsBox.getEditor()。selectAll();
frame.setLayout(new GridLayout(4,0,20,20));
frame.add(fontsBox);
frame.add(testButton);
frame.add(testTextField);
frame.add(testLabel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocation(200,105);
frame.pack();
java.awt.EventQueue.invokeLater(new Runnable(){

@Override
public void run(){
fontsBox.setPopupVisible(true);
fontsBox.setPopupVisible(false);
}
});
frame.setVisible(true);

$ b $ private void start(){
timer = new javax.swing.Timer(750,updateCol());
timer.setRepeats(false);
timer.start();

$ b $ public updateCol(){
return new AbstractAction(text load action){

private static final long serialVersionUID = 1L;
$ b @Override
public void actionPerformed(ActionEvent e){
final Font fnt = new Font(fontsBox.getSelectedItem()。toString(),Font.PLAIN,12);
/ * try {
LookAndFeel lnf = UIManager.getLookAndFeel()。getClass()。newInstance();
final FontUIResource res = new FontUIResource(fnt);
UIDefaults uiDefaults = lnf.getDefaults();
uiDefaults.put(Button.font,res);
uiDefaults.put(TextField.font,res);
uiDefaults.put(Label.font,res);
UIManager.getLookAndFeel()。uninitialize();
UIManager.setLookAndFeel(lnf);
} catch(InstantiationException ex){
Logger.getLogger(SystemFontDisplayer.class.getName())。log(Level.SEVERE,null,ex);
catch(IllegalAccessException ex){
Logger.getLogger(SystemFontDisplayer.class.getName())。log(Level.SEVERE,null,ex);
} catch(UnsupportedLookAndFeelException ex){
Logger.getLogger(SystemFontDisplayer.class.getName())。log(Level.SEVERE,null,ex);
}
UIDefaults defaults = UIManager.getDefaults();
final FontUIResource res = new FontUIResource(fnt);
defaults.put(Button.font,res);
defaults.put(TextField.font,res);
defaults.put(Label.font,res);
SwingUtilities.updateComponentTreeUI(frame); * /
final FontUIResource res = new FontUIResource(fnt);
UIManager.getLookAndFeelDefaults()。put(Button.font,res);
UIManager.getLookAndFeelDefaults()。put(TextField.font,res);
UIManager.getLookAndFeelDefaults()。put(Label.font,res);
SwingUtilities.updateComponentTreeUI(frame);
}
}; (UIManager.LookAndFeelInfo laf:UIManager.getInstalledLookAndFeels()){b

$ b public static void main(String arg []){
/ * try {

if(Nimbus.equals(laf.getName())){
UIManager.setLookAndFeel(laf.getClassName());

$ b} catch(Exception e){
e.printStackTrace();
} * /
java.awt.EventQueue.invokeLater(new Runnable(){
$ b $ @Override
public void run(){
SystemFontDisplayer systemFontDisplayer = new SystemFontDisplayer();
}
});


private class ComboRenderer extends BasicComboBoxRenderer {

private static final long serialVersionUID = 1L;

@Override
public Component getListCellRendererComponent(JList list,Object value,int index,boolean isSelected,boolean cellHasFocus){
super.getListCellRendererComponent(list,value,index,isSelected, cellHasFocus);
final Object fntObj = value;
final String fontFamilyName =(String)fntObj;
setFont(new Font(fontFamilyName,Font.PLAIN,16));
返回这个;





$ p

编辑:我发表了叙述与Nimbus,然后代码为Nimbus

  import java.awt 。*; 
import java.awt.event。*;
import java.util.Locale;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing。*;
import javax.swing.plaf.FontUIResource;
import javax.swing.plaf.basic.BasicComboBoxRenderer;

public class SystemFontDisplayer extends JFrame {

private static final long serialVersionUID = 1L;
private JFrame frame = new JFrame(Nimbus UIDeafaults and Font);
私人JComboBox fontsBox;
private javax.swing.Timer timer = null;
private JButton testButton = new JButton(testButton);
private JTextField testTextField = new JTextField(testTextField);
private JLabel testLabel = new JLabel(testLabel);
$ b $ public SystemFontDisplayer(){
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
String [] fontFamilyNames = ge.getAvailableFontFamilyNames(Locale.getDefault());
fontsBox = new JComboBox(fontFamilyNames);
fontsBox.setSelectedItem(0);
fontsBox.setRenderer(new ComboRenderer());
(new ItemListener(){

@Override
public void itemStateChanged ();
final String fontName = fontsBox.getSelectedItem()。toString();
fontsBox.setFont(new Font(fontName,Font.PLAIN,16));
start();
}
}
});
fontsBox.setSelectedItem(0);
fontsBox.getEditor()。selectAll();
frame.setLayout(new GridLayout(4,0,20,20));
frame.add(fontsBox);
frame.add(testButton);
frame.add(testTextField);
frame.add(testLabel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocation(200,105);
frame.pack();
java.awt.EventQueue.invokeLater(new Runnable(){

@Override
public void run(){
fontsBox.setPopupVisible(true);
fontsBox.setPopupVisible(false);
}
});
frame.setVisible(true);

$ b $ private void start(){
timer = new javax.swing.Timer(750,updateCol());
timer.setRepeats(false);
timer.start();

$ b $ public updateCol(){
return new AbstractAction(text load action){

private static final long serialVersionUID = 1L;
$ b @Override
public void actionPerformed(ActionEvent e){
final Font fnt = new Font(fontsBox.getSelectedItem()。toString(),Font.PLAIN,12);
尝试{
LookAndFeel lnf = UIManager.getLookAndFeel()。getClass()。newInstance();
final FontUIResource res = new FontUIResource(fnt);
UIDefaults uiDefaults = lnf.getDefaults();
uiDefaults.put(Button.font,res);
uiDefaults.put(TextField.font,res);
uiDefaults.put(Label.font,res);
UIManager.getLookAndFeel()。uninitialize();
UIManager.setLookAndFeel(lnf);
} catch(InstantiationException ex){
Logger.getLogger(SystemFontDisplayer.class.getName())。log(Level.SEVERE,null,ex);
catch(IllegalAccessException ex){
Logger.getLogger(SystemFontDisplayer.class.getName())。log(Level.SEVERE,null,ex);
} catch(UnsupportedLookAndFeelException ex){
Logger.getLogger(SystemFontDisplayer.class.getName())。log(Level.SEVERE,null,ex);
}
UIDefaults defaults = UIManager.getDefaults();
final FontUIResource res = new FontUIResource(fnt);
defaults.put(Button.font,res);
defaults.put(TextField.font,res);
defaults.put(Label.font,res);
SwingUtilities.updateComponentTreeUI(frame);
/ * final FontUIResource res = new FontUIResource(fnt);
UIManager.getLookAndFeelDefaults()。put(Button.font,res);
UIManager.getLookAndFeelDefaults()。put(TextField.font,res);
UIManager.getLookAndFeelDefaults()。put(Label.font,res);
SwingUtilities.updateComponentTreeUI(frame); * /
}
}; (UIManager.LookAndFeelInfo laf:UIManager.getInstalledLookAndFeels()){


$ b public static void main(String arg []){
try {
$ b if(Nimbus.equals(laf.getName())){
UIManager.setLookAndFeel(laf.getClassName());

$ b} catch(Exception e){
e.printStackTrace();

java.awt.EventQueue.invokeLater(new Runnable(){
$ b $ @Override
public void run(){
SystemFontDisplayer systemFontDisplayer = new SystemFontDisplayer();
}
});


private class ComboRenderer extends BasicComboBoxRenderer {

private static final long serialVersionUID = 1L;

@Override
public Component getListCellRendererComponent(JList list,Object value,int index,boolean isSelected,boolean cellHasFocus){
super.getListCellRendererComponent(list,value,index,isSelected, cellHasFocus);
final Object fntObj = value;
final String fontFamilyName =(String)fntObj;
setFont(new Font(fontFamilyName,Font.PLAIN,16));
返回这个;




$ div class =h2_lin>解决方案

这个简单的应用程序将按照系列创建一个字体列表,并将其应用于JButton和JTextField。

  import javax.swing。*; 
import java.awt。*;
import java.awt.event。*;
import java.io. *;
/ **
FontSwitcher

@作者Stefan Wagner
@date所以13. Mai 03:25:23 CEST 2012
* /
public class FontSwitcher extends JFrame implements ActionListener
{
private static final String progname =FontSwitcher 0.1;

私人JTextField反馈;
私人JButton jb;
private JList fontList;

public FontSwitcher()
{
super(progname);
JPanel mainpanel = new JPanel();
mainpanel.setLayout(new BorderLayout());
this.getContentPane().add(mainpanel);

GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
String [] fonts = ge.getAvailableFontFamilyNames();
fontList = new JList(fonts);
JScrollPane js = new JScrollPane(fontList);

feedback = new JTextField(Feedback);
jb = new JButton(apply font);
jb.addActionListener(this);
mainpanel.add(feedback,BorderLayout.NORTH);
mainpanel.add(js,BorderLayout.CENTER);
mainpanel.add(jb,BorderLayout.SOUTH);

setSize(400,800);
setLocation(100,100);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);

$ b $ public void actionPerformed(final ActionEvent e)
{
SwingWorker worker = new SwingWorker()
{
protected String doInBackground )throws InterruptedException
{
String cmd = e.getActionCommand();
if(cmd.equals(apply font))
{
String selectedFont = fontList.getSelectedValue().toString();
Font font = new Font(selectedFont,Font.TRUETYPE_FONT,14);
jb.setFont(font);
feedback.setFont(font);
}
返回done;

protected void done()
{
feedback.setText(done);
}
};
worker.execute();


public static void main(final String args [])
{
Runnable runner = new Runnable()
{
public void run()
{
new FontSwitcher();
}
};
EventQueue.invokeLater(runner);
}
}


Please is there another way how to change Font at runtime as using FontUIResource, for the whole AWT/Swing GUI, without any knowledge / interest about if there are local variables and type of JComponents

import java.awt.*;
import java.awt.event.*;
import java.util.Locale;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;
import javax.swing.plaf.FontUIResource;
import javax.swing.plaf.basic.BasicComboBoxRenderer;

public class SystemFontDisplayer extends JFrame {

    private static final long serialVersionUID = 1L;
    private JFrame frame = new JFrame("Nimbus UIDeafaults and Font");
    private JComboBox fontsBox;
    private javax.swing.Timer timer = null;
    private JButton testButton = new JButton("testButton");
    private JTextField testTextField = new JTextField("testTextField");
    private JLabel testLabel = new JLabel("testLabel");

    public SystemFontDisplayer() {
        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
        String[] fontFamilyNames = ge.getAvailableFontFamilyNames(Locale.getDefault());
        fontsBox = new JComboBox(fontFamilyNames);
        fontsBox.setSelectedItem(0);
        fontsBox.setRenderer(new ComboRenderer());
        fontsBox.addItemListener(new ItemListener() {

            @Override
            public void itemStateChanged(ItemEvent e) {
                if (e.getStateChange() == ItemEvent.SELECTED) {
                    final String fontName = fontsBox.getSelectedItem().toString();
                    fontsBox.setFont(new Font(fontName, Font.PLAIN, 16));
                    start();
                }
            }
        });
        fontsBox.setSelectedItem(0);
        fontsBox.getEditor().selectAll();
        frame.setLayout(new GridLayout(4, 0, 20, 20));
        frame.add(fontsBox);
        frame.add(testButton);
        frame.add(testTextField);
        frame.add(testLabel);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocation(200, 105);
        frame.pack();
        java.awt.EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                fontsBox.setPopupVisible(true);
                fontsBox.setPopupVisible(false);
            }
        });
        frame.setVisible(true);
    }

    private void start() {
        timer = new javax.swing.Timer(750, updateCol());
        timer.setRepeats(false);
        timer.start();
    }

    public Action updateCol() {
        return new AbstractAction("text load action") {

            private static final long serialVersionUID = 1L;

            @Override
            public void actionPerformed(ActionEvent e) {
                final Font fnt = new Font(fontsBox.getSelectedItem().toString(), Font.PLAIN, 12);
                /*try {
                    LookAndFeel lnf = UIManager.getLookAndFeel().getClass().newInstance();
                    final FontUIResource res = new FontUIResource(fnt);
                    UIDefaults uiDefaults = lnf.getDefaults();
                    uiDefaults.put("Button.font", res);
                    uiDefaults.put("TextField.font", res);
                    uiDefaults.put("Label.font", res);
                    UIManager.getLookAndFeel().uninitialize();
                    UIManager.setLookAndFeel(lnf);
                } catch (InstantiationException ex) {
                    Logger.getLogger(SystemFontDisplayer.class.getName()).log(Level.SEVERE, null, ex);
                } catch (IllegalAccessException ex) {
                    Logger.getLogger(SystemFontDisplayer.class.getName()).log(Level.SEVERE, null, ex);
                } catch (UnsupportedLookAndFeelException ex) {
                    Logger.getLogger(SystemFontDisplayer.class.getName()).log(Level.SEVERE, null, ex);
                }
                UIDefaults defaults = UIManager.getDefaults();
                final FontUIResource res = new FontUIResource(fnt);
                defaults.put("Button.font", res);
                defaults.put("TextField.font", res);
                defaults.put("Label.font", res);
                SwingUtilities.updateComponentTreeUI(frame);*/
                final FontUIResource res = new FontUIResource(fnt);
                UIManager.getLookAndFeelDefaults().put("Button.font", res);
                UIManager.getLookAndFeelDefaults().put("TextField.font", res);
                UIManager.getLookAndFeelDefaults().put("Label.font", res);
                SwingUtilities.updateComponentTreeUI(frame);
            }
        };
    }

    public static void main(String arg[]) {
        /*try {
            for (UIManager.LookAndFeelInfo laf : UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(laf.getName())) {
                    UIManager.setLookAndFeel(laf.getClassName());
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }*/
        java.awt.EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                SystemFontDisplayer systemFontDisplayer = new SystemFontDisplayer();
            }
        });
    }

    private class ComboRenderer extends BasicComboBoxRenderer {

        private static final long serialVersionUID = 1L;

        @Override
        public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
            super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
            final Object fntObj = value;
            final String fontFamilyName = (String) fntObj;
            setFont(new Font(fontFamilyName, Font.PLAIN, 16));
            return this;
        }
    }
}

.

EDIT: I posted narrative with Nimbus, then code for Nimbus

import java.awt.*;
import java.awt.event.*;
import java.util.Locale;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;
import javax.swing.plaf.FontUIResource;
import javax.swing.plaf.basic.BasicComboBoxRenderer;

public class SystemFontDisplayer extends JFrame {

    private static final long serialVersionUID = 1L;
    private JFrame frame = new JFrame("Nimbus UIDeafaults and Font");
    private JComboBox fontsBox;
    private javax.swing.Timer timer = null;
    private JButton testButton = new JButton("testButton");
    private JTextField testTextField = new JTextField("testTextField");
    private JLabel testLabel = new JLabel("testLabel");

    public SystemFontDisplayer() {
        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
        String[] fontFamilyNames = ge.getAvailableFontFamilyNames(Locale.getDefault());
        fontsBox = new JComboBox(fontFamilyNames);
        fontsBox.setSelectedItem(0);
        fontsBox.setRenderer(new ComboRenderer());
        fontsBox.addItemListener(new ItemListener() {

            @Override
            public void itemStateChanged(ItemEvent e) {
                if (e.getStateChange() == ItemEvent.SELECTED) {
                    final String fontName = fontsBox.getSelectedItem().toString();
                    fontsBox.setFont(new Font(fontName, Font.PLAIN, 16));
                    start();
                }
            }
        });
        fontsBox.setSelectedItem(0);
        fontsBox.getEditor().selectAll();
        frame.setLayout(new GridLayout(4, 0, 20, 20));
        frame.add(fontsBox);
        frame.add(testButton);
        frame.add(testTextField);
        frame.add(testLabel);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocation(200, 105);
        frame.pack();
        java.awt.EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                fontsBox.setPopupVisible(true);
                fontsBox.setPopupVisible(false);
            }
        });
        frame.setVisible(true);
    }

    private void start() {
        timer = new javax.swing.Timer(750, updateCol());
        timer.setRepeats(false);
        timer.start();
    }

    public Action updateCol() {
        return new AbstractAction("text load action") {

            private static final long serialVersionUID = 1L;

            @Override
            public void actionPerformed(ActionEvent e) {
                final Font fnt = new Font(fontsBox.getSelectedItem().toString(), Font.PLAIN, 12);
                try {
                    LookAndFeel lnf = UIManager.getLookAndFeel().getClass().newInstance();
                    final FontUIResource res = new FontUIResource(fnt);
                    UIDefaults uiDefaults = lnf.getDefaults();
                    uiDefaults.put("Button.font", res);
                    uiDefaults.put("TextField.font", res);
                    uiDefaults.put("Label.font", res);
                    UIManager.getLookAndFeel().uninitialize();
                    UIManager.setLookAndFeel(lnf);
                } catch (InstantiationException ex) {
                    Logger.getLogger(SystemFontDisplayer.class.getName()).log(Level.SEVERE, null, ex);
                } catch (IllegalAccessException ex) {
                    Logger.getLogger(SystemFontDisplayer.class.getName()).log(Level.SEVERE, null, ex);
                } catch (UnsupportedLookAndFeelException ex) {
                    Logger.getLogger(SystemFontDisplayer.class.getName()).log(Level.SEVERE, null, ex);
                }
                UIDefaults defaults = UIManager.getDefaults();
                final FontUIResource res = new FontUIResource(fnt);
                defaults.put("Button.font", res);
                defaults.put("TextField.font", res);
                defaults.put("Label.font", res);
                SwingUtilities.updateComponentTreeUI(frame);
                /*final FontUIResource res = new FontUIResource(fnt);
                UIManager.getLookAndFeelDefaults().put("Button.font", res);
                UIManager.getLookAndFeelDefaults().put("TextField.font", res);
                UIManager.getLookAndFeelDefaults().put("Label.font", res);
                SwingUtilities.updateComponentTreeUI(frame);*/
            }
        };
    }

    public static void main(String arg[]) {
        try {
            for (UIManager.LookAndFeelInfo laf : UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(laf.getName())) {
                    UIManager.setLookAndFeel(laf.getClassName());
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        java.awt.EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                SystemFontDisplayer systemFontDisplayer = new SystemFontDisplayer();
            }
        });
    }

    private class ComboRenderer extends BasicComboBoxRenderer {

        private static final long serialVersionUID = 1L;

        @Override
        public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
            super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
            final Object fntObj = value;
            final String fontFamilyName = (String) fntObj;
            setFont(new Font(fontFamilyName, Font.PLAIN, 16));
            return this;
        }
    }
}

解决方案

For instance: Create a new Font from the FontFamily list, and apply it to your component with c.setFont (font);

A second approach is, to search for TTF-Files (for example), and create new Fonts with the static method Font.createFont (new File ("..."));

This simple app will create a List of Fonts by family, and apply it to a JButton and JTextField.

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
/**
    FontSwitcher

    @author Stefan Wagner
    @date So 13. Mai 03:25:23 CEST 2012    
*/
public class FontSwitcher extends JFrame implements ActionListener
{
    private static final String progname = "FontSwitcher 0.1";

    private JTextField feedback;
    private JButton jb;
    private JList fontList;

    public FontSwitcher ()
    {
        super (progname);
        JPanel mainpanel = new JPanel ();
        mainpanel.setLayout (new BorderLayout ());
        this.getContentPane ().add (mainpanel);

        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment ();
        String [] fonts = ge.getAvailableFontFamilyNames ();
        fontList = new JList (fonts);
        JScrollPane js = new JScrollPane (fontList);

        feedback = new JTextField ("Feedback");
        jb = new JButton ("apply font");
        jb.addActionListener (this);
        mainpanel.add (feedback, BorderLayout.NORTH);
        mainpanel.add (js, BorderLayout.CENTER);
        mainpanel.add (jb, BorderLayout.SOUTH);

        setSize (400, 800);
        setLocation (100, 100);
        setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
        setVisible (true);
    }

    public void actionPerformed (final ActionEvent e)
    {
        SwingWorker worker = new SwingWorker () 
        {
            protected String doInBackground () throws InterruptedException 
            {
                String cmd = e.getActionCommand ();
                if (cmd.equals ("apply font"))
                {
                    String selectedFont = fontList.getSelectedValue ().toString ();
                    Font font = new Font (selectedFont, Font.TRUETYPE_FONT, 14);
                    jb.setFont (font);
                    feedback.setFont (font);
                }
                return "done";
            }
            protected void done () 
            {
                feedback.setText ("done");
            }
        };
        worker.execute ();
    }

    public static void main (final String args[])
    {
        Runnable runner = new Runnable () 
        {
            public void run () 
            {
                new FontSwitcher ();
            }
        };
        EventQueue.invokeLater (runner);
    }
}

这篇关于在运行时更改字体的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆