как сделать список шрифтов работает в JComboBox

1

Я пробовал много вещей, и я только мог помещать шрифты в список, но как я могу заставить их работать, когда они будут выбраны?

это мой код

    package textModifier;

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.util.logging.Handler;

import javax.swing.*;
import javax.swing.border.*;    
import javax.swing.*;

public class javaTextEditor extends JComboBox implements ActionListener, ItemListener {

    JFrame frame = new JFrame("A text modifier frame - Assignment 1");      
    Border layout = BorderFactory.createLineBorder(Color.RED, 1);

    JPanel panel = new JPanel();
    JPanel panel2 = new JPanel();
    JPanel panel3 = new JPanel();
    JPanel panel4 = new JPanel();
    JPanel panel5 = new JPanel();

    JLabel label1 = new JLabel("Enter Message:");
    JLabel label2 = new JLabel("Select Font:");
    JLabel label3 = new JLabel();

    JTextField text = new JTextField("UIPG - Assignment 1");

    JComboBox fonts;

    GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
    String fontName[] = ge.getAvailableFontFamilyNames();
    Vector vector = new Vector();

    ButtonGroup radio = new ButtonGroup();
    JRadioButton red = new JRadioButton("Red");
    JRadioButton green = new JRadioButton("Green");
    JRadioButton blue = new JRadioButton("Blue");

    JCheckBox Capitalized, Bold, Italic;

    JButton Left, Center, Right;

    public void ui(){

        for (int i = 1; i < fontName.length; i++)
            vector.addElement(fontName[i]);

        fonts = new JComboBox(vector); // wwwwqput the font names on the ComboBox

        Capitalized = new JCheckBox("Capitalized");
        Bold = new JCheckBox("Bold");
        Italic = new JCheckBox("Italic");

        Left = new JButton("Left");
        Center = new JButton("Center");
        Right = new JButton("Right");

        radio.add(red);
        radio.add(green);
        radio.add(blue);

        panel.add(label1);
        panel.add(text);
        panel.add(label2);
        panel.add(fonts);

        panel3.add(red);
        panel3.add(green);
        panel3.add(blue);

        panel2.add(Capitalized);
        panel2.add(Bold);
        panel2.add(Italic);

        panel4.add(Left);
        panel4.add(Center);
        panel4.add(Right);

        panel5.setBorder(layout);
        panel5.setBackground(Color.YELLOW);
        panel5.add(label3);

        Left.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                if (e.getSource() == Left)
                    label3.setLocation(10, 8);


            }
        });

        Center.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                if(e.getSource() == Center)
                    label3.setLocation(245, 8);

            }
        });

        Right.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                if(e.getSource() == Right)
                    label3.setLocation(480, 8);

            }
        });
        red.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
            if(red.isSelected())
                label3.setForeground(Color.red);
            }
        });

        green.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                if(green.isSelected())
                label3.setForeground(Color.green);
            }
        });


        blue.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                if(blue.isSelected())
                    label3.setForeground(Color.blue);
            }
        });

        text.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                String str = text.getText();
                label3.setText(str);

            }
        });

        panel5.add(label3);
        frame.setVisible(true);
        frame.setSize(800, 200);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new BorderLayout());

        panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
        panel2.setLayout(new BoxLayout(panel2, BoxLayout.Y_AXIS));
        panel3.setLayout(new BoxLayout(panel3, BoxLayout.Y_AXIS));
        panel4.setLayout(new FlowLayout(FlowLayout.CENTER));

        frame.getContentPane().add(BorderLayout.NORTH, panel);
        frame.getContentPane().add(BorderLayout.EAST, panel2);
        frame.getContentPane().add(BorderLayout.WEST, panel3);
        frame.getContentPane().add(BorderLayout.SOUTH, panel4);
        frame.getContentPane().add(BorderLayout.CENTER, panel5);

        Bold.addItemListener(this);
        Italic.addItemListener(this);
        Capitalized.addItemListener(this);


    }



    @Override
    public void actionPerformed(ActionEvent e) {

}



    @Override
    public void itemStateChanged(ItemEvent e) {
        Font f = null;

        if(Bold.isSelected() && Italic.isSelected() && Capitalized.isSelected()){
            f = new Font("Serif", Font.BOLD + Font.ITALIC, 14);
            label3.setText(label3.getText().toUpperCase());
        }
        else if(Bold.isSelected())
            f = new Font("Serif", Font.BOLD, 14);
        else if(Italic.isSelected())
            f = new Font("Serif", Font.ITALIC, 14);
        else if(Capitalized.isSelected())
            label3.setText(label3.getText().toUpperCase());
        else{
            f = new Font("Serif", Font.PLAIN, 14);
        }
        label3.setFont(f);
    }

}

что я должен написать в ActionListener, который может заставить шрифты работать?

  • 0
    Вы не добавили ItemListener или ActionListener на JComboBox .
  • 0
    Я не вижу слушателя комбобокса. Ваша попытка выполнить эту задачу опубликована в коде выше?
Показать ещё 5 комментариев
Теги:
swing
jcombobox
actionlistener
itemlistener

1 ответ

3
Лучший ответ

Поскольку вы еще не отправили сообщение об этом, попробуйте указать его в правильном направлении.

Сначала вам нужно взглянуть на API шрифтов. Там вы увидите такие методы, как

Итак, в своем слушателе сначала получите шрифт того, что вы хотите, чтобы изменить шрифт.

Font font = label.getFont();

Затем используйте геттеры выше, чтобы получить значения и создать/установить новый шрифт на основе нового значения, полученного из поля со списком. Что-то вроде

String family = (String)combobox.getSelectedItem();
Font font = label.getFont();
int size = font.getSize();
int style = font.getStyle();
label.setFont(new Font(family, size, style));

Вы можете использовать ту же технику для своих слушателей и для своих флажков, так как я вижу, что вы жестко кодируете семью.


Примечания:

  • Использовать соглашение об именах java - переменные начинаются с букв в нижнем регистре. Boldbold

  • Также я понятия не имею, почему ваш класс расширяет JComboBox. Похож на совершенно ошибочный дизайн

  • 0
    спасибо ... мне очень помогло

Ещё вопросы

Сообщество Overcoder
Наверх
Меню