Создавать окно с JTextPane и JMenuBar, чтобы изменять аспекты текста

я пытаюсь сделать так, чтобы я функционировало простое упражнение, в котором я хочу создать окно с JTextPane и JMenuBar, чтобы изменять аспекты всего текста внутри JTextPane (не только отборный) как размер, полужирный шрифт или шрифт. Я хочу, что изменения, которые он заставляет его в текст, помещать это например как в полужирном шрифте, они накопились в следующие изменения, как я касаюсь статей JMenuBar. Для этого я создал класс, в котором я перемещаю из-за параметров строителя 3 переменные setFont. Также я создал другие 3 переменные в главном классе, чтобы сохранять параметры строителя, и что я схватил изменения, которые я делаю ему в формат текста, они накопились. Проблема это у меня есть в этой точке, я не добиваюсь того, чтобы мне сохраняли изменения в этих переменных.

package graficosyventanas;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class ejercicio_practico__procesador_texto {


    public static void main(String[] args) {

        marq.setBounds(150,150,1000,450);
        marq.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        marq.add(lam);
        lam.setLayout(new BorderLayout());
        lam.add(mibarra, BorderLayout.NORTH);
        lam.add(texto, BorderLayout.CENTER);
        mibarra.add(fuente);
        mibarra.add(estilo);
        mibarra.add(tamanio);

        agrex fuente1 = new ejercicio_practico__procesador_texto().new agrex("Verdana", est, tam, fuente,"Verdana");
        agrex estilo1 = new ejercicio_practico__procesador_texto().new agrex(fu, Font.BOLD, tam, estilo,"Negrita");
        agrex estilo2 = new ejercicio_practico__procesador_texto().new agrex(fu, Font.PLAIN, tam, estilo,"Normal");
        agrex fuente2 = new ejercicio_practico__procesador_texto().new agrex("Calibri", est, tam, fuente,"Calibri");

        marq.setVisible(true);
    }

    private static JFrame marq = new JFrame();

    private static JMenuBar mibarra = new JMenuBar();
    private static JTextPane texto = new JTextPane();
    private static JPanel lam = new JPanel();
    private static JMenu fuente = new JMenu("Fuente");
    private static JMenu tamanio = new JMenu("Tamaño");
    private static JMenu estilo = new JMenu("Estilo");

    private static String fu="Arial";  //las 3 variables para que se me acumulen los cambios de formato del texto
    private static int est=Font.PLAIN;
    private static int tam=12;

    private static agrex tamanio1 = new ejercicio_practico__procesador_texto().new agrex(fu, est, 20, tamanio,"20");

    private class agrex {
            public agrex(String fuent, int estil, int taman, JMenu x,String titulo){

                JMenuItem item = new JMenuItem(titulo);
                x.add(item);
                item.addActionListener(new ActionListener(){

                        public void actionPerformed(ActionEvent e) {        //clase interna anónima

                        texto.setFont(new Font(fuent,estil,taman));
                        tam=taman;
                        est=estil;
                        fu=fuent;
                        System.out.print(fu + ", ");
                        System.out.print(est + ", ");
                        System.out.println(tam);
                    }
                });
            }
          }
        }
0
задан 12.02.2017, 07:34
1 ответ

здесь разметите немного твой код так что ты мог хранить стоимость, измените класс Agrex для того, чтобы он получил в наследство JMenuItem, и так добавлять новые признаки, добавив их к меню, каждая статья поддержит стоимость, которую ты послал в contructor.

package main;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class test {


    public static void main(String[] args) {

        marq.setBounds(150,150,1000,450);
        marq.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        marq.add(lam);
        lam.setLayout(new BorderLayout());
        lam.add(mibarra, BorderLayout.NORTH);
        lam.add(texto, BorderLayout.CENTER);
        mibarra.add(fuente);
        mibarra.add(estilo);
        mibarra.add(tamanio);

        test.Agrex fuente1 = new test.Agrex(fuente, texto, "Verdana", "Verdana", est, tam);
        test.Agrex estilo1 = new test.Agrex(estilo, texto,"Negrita","Negrita", est, tam);

        marq.setVisible(true);
    }

    private static JFrame marq = new JFrame();

    private static JMenuBar mibarra = new JMenuBar();
    private static JTextPane texto = new JTextPane();
    private static JPanel lam = new JPanel();
    private static JMenu fuente = new JMenu("Fuente");
    private static JMenu tamanio = new JMenu("Tamaño");
    private static JMenu estilo = new JMenu("Estilo");

    private static String fu="Arial";  //las 3 variables para que se me acumulen los cambios de formato del texto
    private static int est=Font.PLAIN;
    private static int tam=12;

    private static class Agrex extends JMenuItem{
    private String fuente;
    private int estilo, tamano;
    private JTextPane pane;

    public Agrex(JMenu menu, JTextPane pane, String titulo, String fuente, int estilo, int tamano){
        super(titulo);

        this.pane = pane;
        this.fuente = fuente;
        this.estilo = estilo;
        this.tamano = tamano;
        menu.add(this);

        this.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                Agrex agrex = (Agrex)e.getSource();
                System.out.println("agrex: " + agrex.fuente);
                agrex.pane.setFont(new Font(agrex.fuente, agrex.estilo, agrex.tamano));
            }
        });
    }
}

}
2
ответ дан 24.11.2019, 13:11