Изменить стиль шрифта, размер в приложении Java swing - PullRequest
0 голосов
/ 16 января 2020

Я пишу почтовое приложение с java свингом. Я хочу, чтобы пользователь мог изменять шрифт при написании электронного письма, но я не уверен, как это сделать. Я создал JComboBox, в котором есть все шрифты.

Я полагаю, мне следует использовать getSelectedItem(), и добавить actionListener в JComboBox для передачи этой информации в JTextArea? Или есть другие способы? Вот мой код:

String[] fonts = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();

        JComboBox comboBox = new JComboBox(fonts);// create a combo box with the array
        comboBox.setFont(new Font("Times New Roman", Font.PLAIN, 12));// set the font
        comboBox.setBounds(21, 6, 193, 25);// set size and location
        add(comboBox);

Как заставить все текстовое поле изменить шрифт в соответствии с выбранным элементом в поле со списком?

1 Ответ

1 голос
/ 20 января 2020

Здесь вы можете найти рабочий пример того, что вы спрашиваете (если я правильно понял), встроенный в простой основной метод.

Чтобы упростить задачу, я использовал только поле со списком для выбора имени шрифта, но было бы неплохо добавить две другие комбинации для создания размера и стиля шрифта (BOLD, PLAIN, ITALI C) выбирается тоже.

По сути, да, самый распространенный способ - привязать actionListener к comboBox, чтобы изменить шрифт, когда comboBox взаимодействует с пользователем. Конечно, это не единственный способ, вы даже можете прослушивать нажатие клавиш клавиатуры, чтобы вызвать действие, или реализовать какой-то другой способ распознавания намерения пользователя изменить шрифт, но, насколько я знаю, слушатель действия, который я использовал в Пример самый простой способ.

package fontchooser;

import java.awt.Font;
import java.awt.GraphicsEnvironment;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;

import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class ComboFont {

    // Put this in other two combo-boxes if you want to make these selectable by user
    public static int default_size = 16;
    public static int default_style = Font.PLAIN;

    public static void main(String[] args) {
        String[] fonts = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();

        GridBagLayout layout = new GridBagLayout();
        layout.columnWidths = new int[] {400};
        layout.rowHeights = new int[] {100,300};

        JFrame container = new JFrame();
        container.setLayout(layout);
        container.setBounds(150,150,400,400);
        container.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JComboBox<String> comboFontNames = new JComboBox<String>(fonts);
        JTextArea textArea = new JTextArea();
        JScrollPane scrollPane = new JScrollPane();
        scrollPane.setViewportView(textArea);

        GridBagConstraints comboContraints = new GridBagConstraints();
        comboContraints.gridx = 0;
        comboContraints.gridy = 0;
        // This only set font to display on combo
        comboFontNames.setFont(new Font("Times New Roman", Font.PLAIN, 12));
        container.add(comboFontNames, comboContraints);

        GridBagConstraints scrollerContraints = new GridBagConstraints();
        scrollerContraints.gridx = 0;
        scrollerContraints.gridy = 1;
        scrollerContraints.gridwidth = 400;
        scrollerContraints.fill = GridBagConstraints.BOTH;
        container.add(scrollPane, scrollerContraints);

        // Variant of action listener with lambda (since java 8)
        comboFontNames.addActionListener((e) -> {

            String selectedFamilyName = (String)comboFontNames.getSelectedItem();
            Font selectedFont = new Font(selectedFamilyName, default_style, default_size);

            textArea.setFont(selectedFont);
            textArea.repaint();
        });

        container.setVisible(true);
    }
}

Надеюсь, это то, что вам нужно! пока

Алессио

...