【问题标题】:Display selected options in a text area在文本区域中显示选定的选项
【发布时间】:2014-09-23 20:08:45
【问题描述】:

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

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);
    }
  }

【问题讨论】:

  • 目的是改变文本区域的字体样式

标签: java swing jtextarea


【解决方案1】:

如果您查看JavaDocs for Font,您会看到...

style - Font 的样式常量 整数位掩码,可能是 PLAIN,或 BOLD 和/或的按位联合 斜体(例如,斜体或粗体|斜体)。如果样式参数 不符合预期的整数位掩码之一,则 样式设置为 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...

【讨论】:

    【解决方案2】:

    要将文本放入 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
    

    【讨论】:

    • area.append(style+size);你是这个意思吗?
    • 对不起,我没有得到你想要的。所以你有一些单选按钮,当你选择一个时,你想让它改变样式和字体?
    • 是的,我希望单选按钮更改字体大小和复选框更改字体样式
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-26
    • 1970-01-01
    • 2015-04-18
    • 1970-01-01
    • 2012-05-11
    相关资源
    最近更新 更多