在文本区域中显示所选选项

时间:2014-09-23 20:08:45

标签: java swing jtextarea

我正在尝试使用字体大小的单选按钮更改文本区域中的文本,并选中字体样式的复选框。我不知道如何在文本区域显示文本,请参阅最后两行。

package assignment3;
import java.awt.Font;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.ButtonGroup;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextArea;
public class Assignment3 extends JFrame implements ItemListener {
  JPanel panel;
  JTextArea area;
  JRadioButton small;
  JRadioButton medium;
  JRadioButton large;
  ButtonGroup btngrp;
  JCheckBox bold;
  JCheckBox italic;
  JCheckBox underline;
  Font smalla;
  Font med;
  Font la;
  Font b;
  Font i;
  Font u;
  public Assignment3() {
    setTitle("My Work of text");
    setSize(400, 400);
    panel = new JPanel();
    area = new JTextArea(5, 20);
    btngrp = new ButtonGroup();
    btngrp.add(small);
    btngrp.add(medium);
    btngrp.add(large);
    small = new JRadioButton("Small");
    medium = new JRadioButton("Medium");
    large = new JRadioButton("Large");
    bold = new JCheckBox("Bold");
    italic = new JCheckBox("Italic");
    underline = new JCheckBox("Underline");
    smalla = new Font("Rockwell", Font.PLAIN, 12);
    med = new Font("Rockwell", Font.PLAIN, 15);
    la = new Font("Rockwell", Font.PLAIN, 20);
    b = new Font("Rockwell", Font.BOLD, 12);
    i = new Font("Rockwell", Font.ITALIC, 15);
    u = new Font("Rockwell", Font.ROMAN_BASELINE, 20);
    add(panel);
    panel.add(area);
    panel.add(small);
    panel.add(medium);
    panel.add(large);
    panel.add(bold);
    panel.add(italic);
    panel.add(underline);
    small.addItemListener(this);
    medium.addItemListener(this);
    large.addItemListener(this);
    bold.addItemListener(this);
    underline.addItemListener(this);
    italic.addItemListener(this);
  }
  public static void main(String[] args) {
    new Assignment3().setVisible(true);
  }
  public void itemStateChanged(ItemEvent ie) {
    int style = 0;
    int size = 12;
    if (small.isSelected()) {
      size = 12; /*area.setFont(smalla);*/
    } else if (medium.isSelected()) {
      size = 14; /*area.setFont(med);*/
    } else if (large.isSelected()) {
      size = 20; /*area.setFont(la);*/
    }
    if (bold.isSelected()) {
      style += Font.BOLD
        /*area.setFont(new Font(Font.SANS_SERIF, style, 
        style))*/
      ;
    }
    if (italic.isSelected()) {
      style += Font.ITALIC /*area.setFont(new Font(Font.SANS_SERIF, style, style))*/ ;
    }
    if (underline.isSelected()) {
      style += Font.CENTER_BASELINE /*area.setFont(new Font(Font.SANS_SERIF, style, style))*/ ;
    }
    area.setFont(new Font(size + style); area.setFont(style + size);
    }
  }

2 个答案:

答案 0 :(得分:0)

要在JTextArea中放置文本,您可以使用append()或setText()方法:

JTextArea myTextArea = new JTextArea();
...
myTextArea.setText("What a happy day"); // replaces everything inside the compenent
...
myTextArea.append(" and i'm gonna enjoy it.\n"); // Append the text at the end

答案 1 :(得分:0)

如果你仔细查看JavaDocs for Font,你会看到......

  

style - Font的样式常量样式参数是一个   整数位掩码,可以是PLAIN,也可以是BOLD和/或的逐位联合   ITALIC(例如,ITALIC或BOLD | ITALIC)。如果是样式参数   不符合预期的整数位掩码之一   style设置为PLAIN。

这意味着你不能简单地添加"风格常数在一起,你需要使用一点点明智的联盟......

int style = 0;
int size = 12;
if (small.isSelected()){size=12;/*area.setFont(smalla);*/}
else if (medium.isSelected()){size=14;/*area.setFont(med);*/}
else if (large.isSelected()){size=20;/*area.setFont(la);*/}
if (bold.isSelected()){ 
    style |=Font.BOLD /*area.setFont(new Font(Font.SANS_SERIF, style,  style))*/;
} 
if (italic.isSelected()){
    style |=Font.ITALIC /area.setFont(new Font(Font.SANS_SERIF, style, style))/;
} 
if (underline.isSelected()){
    style |=Font.CENTER_BASELINE /area.setFont(new Font(Font.SANS_SERIF, style, style))/;
} 

如果您阅读了JavaDocs,您还会看到Font的构造函数需要3个参数namestylesize

这意味着这无法发挥作用......

area.setFont(new Font(size + style);
area.setFont(style+size);

现在,您不需要创建新的Font实例,您可以使用现有实例并根据您的要求进行更改

area.setFont(area.getFont().deriveFont(style, size));

...所以简短的回答是,在卡住时阅读JavaDocs ......