0

フォントを変更するたびに、デフォルトのサイズである 12 に戻ります。前に「玉野」メニューで変更しても、毎回 12 にしか戻りません。デリバティブフォント()でサイズを変更しますが、他の方法で変更しないでください。

public static class cambiar extends JFrame {

    public cambiar() {
        final Font aryal = new Font("Comic Sans MS", Font.PLAIN, 12);
        JFrame ventana = new JFrame("Cambios en el Texto!");
        JPanel adentro = new JPanel();
        final JLabel texto = new JLabel("Texto a Cambiar!");
        texto.setFont(aryal);
        JMenuBar menu = new JMenuBar();

        JMenu fuentes = new JMenu("Fuentes");
        /* Elementos de Fuentes */
        JMenuItem arial = new JMenuItem("Arial");
        arial.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                Font arrrial = new Font("Arial", Font.PLAIN, 12);
                float tam = (float) texto.getFont().getSize();
                String hola = String.valueOf(tam);
                texto.setFont(arrrial);
                texto.setFont(texto.getFont().deriveFont(tam));
            }
        });



        fuentes.add(arial);
        /* FIN Fuentes */


        JMenu tamano = new JMenu("Tamano");

        /* Elementos de Tamano */
        JMenuItem font13 = new JMenuItem("13");
        font13.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                texto.setFont(texto.getFont().deriveFont(23.0f));
            }
        });

        JMenuItem font14 = new JMenuItem("14");
        arial.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                texto.setFont(aryal);
            }
        });

        JMenuItem font15 = new JMenuItem("15");
        arial.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                texto.setFont(aryal);
            }
        });

        JMenuItem font16 = new JMenuItem("16");
        arial.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                texto.setFont(aryal);
            }
        });

        JMenuItem font17 = new JMenuItem("17");
        arial.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                texto.setFont(aryal);
            }
        });

        JMenuItem font18 = new JMenuItem("18");
        arial.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                texto.setFont(aryal);
            }
        });

        JMenuItem font19 = new JMenuItem("19");
        arial.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                texto.setFont(aryal);
            }
        });

        JMenuItem font20 = new JMenuItem("20");
        arial.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                texto.setFont(aryal);
            }
        });

        tamano.add(font13);
        /* FIN tanano */

        JMenu tipo = new JMenu("Tipo");

        /* Elementos de tipo */

        /* FIN tipo */


        /* Elementos del JMENU */
        menu.add(fuentes);
        menu.add(tamano);
        menu.add(tipo);
        /* FIN JMENU */

        /* Elementos del JPanel */
        adentro.add(menu);
        adentro.add(texto);
        /* FIN JPanel */

        /* Elementos del JFRAME */
        ventana.add(adentro);
        ventana.setVisible(true);
        ventana.setSize(250, 250);
        /* FIN JFRAME */        
    }
}

前もって感謝します!

4

2 に答える 2

2

その理由はaddActionListener()、同じ aryal を追加する方法にありますfont

次のような変更を提案します。

.addActionListener(new ActionListener(){ 
            public void actionPerformed(ActionEvent e){
                texto.setFont(aryal.deriveFont(size)); //where size is the size that you want to set
            }
        });

たとえば、fontサイズを 20 に変更する場合は、次のようにします。

JMenuItem font20 = new JMenuItem("20");
font20.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        texto.setFont(aryal.deriveFont(20));
    }
});

注: ここでは、JLabel textoのフォント サイズを変更しようとしていると想定しています。しかし、アイデアはどこでも同じです。

于 2012-08-31T02:49:21.170 に答える
2

まず、必要なアクション リスナーは 1 つだけです。

private class MenuListener implements ActionListener {
    @Override public void actionPerformed(ActionEvent e) {
        Object caller = e.getSource();
        if (caller != null && caller.instanceOf JMenuItem) {
            JMenuItem src = (JMenuItem)caller;
            String size = src.getText();

            if (size != null) {
                float fontSize = Float.parseFloat(size);
                texto.setFont(aryal.deriveFont(fontSize));
            }
        }
    }
}

次に、JMenuItems を作成するとき:

MenuListener listener = new MenuListener();
JMenuItem font18 = new JMenuItem("18");
font18.setActionListener(listener);

このメソッドは、指定されたサイズに設定されたフォントを返しますが、実際にフォント自体を変更deriveFontするわけではありません。したがって、新しいサイズのフォントで呼び出す必要があります。setFont

一般に、フォント サイズを変更するには:

Font font; // some font you already have instantiated
float size = 20f; // the target font size
Font newFont = font.deriveFont(size); // the newly sized font

編集

質問に答えて、上記のMenuListenerコードは MenuListener.java と呼ばれる独自のクラスに入れる必要があります (ただし、作成する必要がありますpublic) 、またはクラスに配置しますcambiar

public class cambiar extends JFrame { 
    ... your existing code here ...

    private class MenuListener implements ActionListener {
        ...
    }
}
于 2012-08-31T02:53:48.867 に答える