Я пытаюсь сделать свинг текстовый редактор. Каждый раз, когда шрифт становится большим, он изменяет размер моей JTextArea, которую я использую, и портит макет entie - PullRequest
0 голосов
/ 08 сентября 2018

Я пытаюсь сделать свинг текстовый редактор. Каждый раз, когда шрифт становится большим, он изменяет размер моей JTextArea, которую я использую, и портит макет entie. Есть ли способ заблокировать размер страницы по вертикали и горизонтали? Я попытался обернуть это, но это едва работает, и это идет только горизонтально. Я посмотрел на Google и другие ресурсы и не мог найти ничего, чтобы помочь мне.

 import java.awt.Color;
 import java.awt.Font;
 import java.awt.event.ItemEvent;
 import java.awt.event.ItemListener;
 import java.awt.event.KeyEvent;

  import javax.swing.BorderFactory;
 import javax.swing.ButtonGroup;
 import javax.swing.JCheckBoxMenuItem;
 import javax.swing.JFrame;
 import javax.swing.JMenu;
 import javax.swing.JMenuBar;
 import javax.swing.JMenuItem;
 import javax.swing.JPanel;
 import javax.swing.JRadioButtonMenuItem;
 import javax.swing.JTextArea;

 public class Other extends JFrame {

 //create menu variables
 static JMenuBar bar;
 static JMenu fileMenu;
 static JMenu textMenu;
 static JMenuItem saveFile;
 static JMenuItem newFile;
 static JCheckBoxMenuItem boldRadio;
 static JCheckBoxMenuItem italicsRadio;
 static JMenuItem sizeOptions;
 static JRadioButtonMenuItem size8;
 static JRadioButtonMenuItem size9;
 static JRadioButtonMenuItem size10;
 static JRadioButtonMenuItem size11;
 static JRadioButtonMenuItem size12;
 static JRadioButtonMenuItem size14;
 static JRadioButtonMenuItem size18;
 static JRadioButtonMenuItem size24;
 static JRadioButtonMenuItem size30;
 static JRadioButtonMenuItem size36;
 static JRadioButtonMenuItem size48;
 static JTextArea txtArea;

 //fonts
 static Font font8;
 static Font font9;
 static Font font10;
 static Font font11;
 static Font font12;
 static Font font14;
 static Font font18;
 static Font font24;
 static Font font30;
 static Font font36;
 static Font font48;

 //arrays


  Other(){
    super("Text Editor");

    JPanel panel = new JPanel();
    add(panel);
    setBackground(Color.LIGHT_GRAY);

    txtArea = new JTextArea(41,45);
    txtArea.setEditable(true);
    panel.add(txtArea);
    txtArea.setBorder(BorderFactory.createLineBorder(Color.GRAY));
    txtArea.setLineWrap(true);

    //base menu bar code here
    bar = new JMenuBar();
    setJMenuBar(bar);
    bar.setForeground(Color.BLACK);

    fileMenu = new JMenu("File");
    bar.add(fileMenu);

    textMenu = new JMenu("Text");
    bar.add(textMenu);
    textMenu.setOpaque(true);
    textMenu.setBorder(BorderFactory.createLineBorder(null,5));

    //menu items code here
    saveFile = new JMenuItem("Save File");
    fileMenu.add(saveFile);
    saveFile.setMnemonic(KeyEvent.VK_S);

    newFile = new JMenuItem("New File");
    fileMenu.add(newFile);
    newFile.setMnemonic(KeyEvent.VK_N);

    boldRadio = new JCheckBoxMenuItem("Bold");
    textMenu.add(boldRadio);
    boldRadio.setMnemonic(KeyEvent.VK_B);

    italicsRadio = new JCheckBoxMenuItem("Italics");
    textMenu.add(italicsRadio);
    italicsRadio.setMnemonic(KeyEvent.VK_I);

    sizeOptions = new JMenu("Text Size");
    textMenu.add(sizeOptions);
    sizeOptions.setSize(500,500);

    ButtonGroup sizesG = new ButtonGroup();

    size8 = new JRadioButtonMenuItem("8");
    size9 = new JRadioButtonMenuItem("9");
    size10 = new JRadioButtonMenuItem("10");
    size11 = new JRadioButtonMenuItem("11");
    size12 = new JRadioButtonMenuItem("12");
    size14 = new JRadioButtonMenuItem("14");
    size18 = new JRadioButtonMenuItem("18");
    size24 = new JRadioButtonMenuItem("24");
    size30 = new JRadioButtonMenuItem("30");
    size36 = new JRadioButtonMenuItem("36");
    size48 = new JRadioButtonMenuItem("48");
    size11.setSelected(true);

     for(JRadioButtonMenuItem x: sizes) {
            sizesG.add(x);
            sizeOptions.add(x);
            x.addItemListener(new sizeClass());
    }

    font8 = new Font("Serif",Font.PLAIN,8);
    font9 = new Font("Serif",Font.PLAIN,9);
    font10 = new Font("Serif",Font.PLAIN,10);
    font11 = new Font("Serif",Font.PLAIN,11);
    font12 = new Font("Serif",Font.PLAIN,12);
    font14 = new Font("Serif",Font.PLAIN,14);
    font18 = new Font("Serif",Font.PLAIN,18);
    font24 = new Font("Serif",Font.PLAIN,24);
    font30 = new Font("Serif",Font.PLAIN,30);
    font36 = new Font("Serif",Font.PLAIN,36);
    font48 = new Font("Serif",Font.PLAIN,48);
   }

    class sizeClass implements ItemListener{

     public void itemStateChanged(ItemEvent e) {
        if(size8.isSelected()) {
            txtArea.setFont(font8);
        }else if(size9.isSelected()) {
            txtArea.setFont(font9);
        }else if(size10.isSelected()) {
            txtArea.setFont(font10);
        }else if(size11.isSelected()) {
            txtArea.setFont(font11);
        }else if(size12.isSelected()) {
            txtArea.setFont(font12);
        }else if(size14.isSelected()) {
            txtArea.setFont(font14);
        }else if(size18.isSelected()) {
            txtArea.setFont(font18);
        }else if(size24.isSelected()) {
            txtArea.setFont(font24);
        }else if(size30.isSelected())  {
            txtArea.setFont(font30);
        }else if(size36.isSelected()) {
            txtArea.setFont(font36);
        }else if(size48.isSelected()) {
            txtArea.setFont(font48);
        }

      }

   }
 }

1 Ответ

0 голосов
/ 08 сентября 2018
txtArea = new JTextArea(41,45);
txtArea.setEditable(true);
panel.add(txtArea);

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

Ваш код должен выглядеть примерно так:

txtArea = new JTextArea(41,45);
//txtArea.setEditable(true); // this is the default
//panel.add(txtArea);
JScrollPane scrollPane = new JScrollPane( txtArea );
panel.add( scrollPane ):

Кроме того, избавьтесь от статического ключевого слова для всех ваших переменных. Он не нужен и не должен использоваться.

Не создавайте все эти переменные для размера шрифта. Вы можете создать общий код для вашего ItemListener. Что-то вроде:

JRadioButtonMenuItem button = (JRadioButtonMenuItem)e.getSource();
float size = Float.parseFloat(button.getText();
Font font = txtArea.getFont();
txtArea.setFont( font.deriveFont( size) );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...