马克7758 2020-06-22 23:18 采纳率: 25%
浏览 258

为什么Java简单图形界面改不了字体样式?

这就是Java GUI一个简单的文字预览器
程序可以运行,只是有一点儿Bug找不出来
可以改字体的颜色了已经,样式的参数也改变了
但是最后显示处理样式还是不变,有点绕进去了我
大神求救,小白要哭了

import java.awt.*;
import java.awt.event.*;
import java.awt.font.*;
import javax.swing.*;

public class ArtFont extends JFrame implements ActionListener{
    JComboBox fontType;
    JComboBox fontSize;
    JCheckBox boldBx;//粗体按钮
    JCheckBox italicBx;//斜体按钮
    JButton colorBtn; //颜色按钮
    String[] fontNames;//字体名称
    String[] fontSizes;//字体尺寸
    JLabel label;//输入提示标签
    JTextField inputText;//文字输入框
    JTextArea txtArea;//文字显示区
    JPanel fontPanel;//字体设置
    JPanel showPanel;//显示效果区
    Font font;
    int boldStyle,italicStyle,underlineStyle;
    int fontSizeStyle;
    String fontNameStyle;
    Color colorStyle = Color.black;//设置字体的默认颜色为黑色;
    public ArtFont(){
        super("字体设置");
        //设置默认字体
        boldStyle = 0;
        italicStyle = 0;
        underlineStyle = 0;
        fontSizeStyle = 10;
        fontNameStyle = "隶书";

        fontPanel = new JPanel();
        fontPanel.setLayout(new FlowLayout());

        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
        fontNames = ge.getAvailableFontFamilyNames();//获得系统中所有字体的名字
        font = new Font(fontNameStyle,boldStyle+italicStyle,fontSizeStyle);
        fontType = new JComboBox(fontNames);
        fontType.setEditable(false);
        fontType.setMaximumRowCount(10);

        fontType.addItemListener(new ItemListener(){
            public void itemStateChanged(ItemEvent e){  
                fontNameStyle = fontType.getSelectedItem().toString();
                //txtArea.getText().setFont(new Font((String)fontType.getSelectedItem(),Font.PLAIN,10));//实现监听字体名字改变的事件
            }
        });

        //设置字体大小
        fontSizes = new String[63];
        for(int i=0;i<63;i++){
            fontSizes[i] = Integer.toString((i+10));
        }
        fontSize = new JComboBox(fontSizes);
        fontSize.setEditable(false);
        fontSize.setMaximumRowCount(10);
        fontSize.addItemListener(new ItemListener(){
            public void itemStateChanged(ItemEvent e){
                if(e.getSource() == fontSize){//改变字体
                    fontSizeStyle = Integer.parseInt(fontSize.getSelectedItem().toString());
                }
                else if(e.getSource()==inputText){//将输入的文字在文字显示区表示
                    txtArea.setText(inputText.getText());
                }
                //txtArea.getText().setFont(new Font("宋体",Font.PLAIN,(int)fontSize.getSelectedItem()));//实现监听字体大小改变的方法
            }
        });
        //设置粗体选择按钮;
        boldBx = new JCheckBox("粗体");
        boldBx.addItemListener(new ItemListener(){
            public void itemStateChanged(ItemEvent e){  
                boldStyle = 1;
                //txtArea.getText().setFont(new Font("宋体",Font.BOLD,10));//实现监听选择粗体状态改变的方法
            }
        });

        //实现斜体选择按钮
        italicBx = new JCheckBox("斜体");
        italicBx.addItemListener(new ItemListener(){
            public void itemStateChanged(ItemEvent e){  
                italicStyle = 1;
                //txtArea.getText().setFont(new Font("宋体",Font.ITALIC,10));//实现监听选择斜体状态改变的方法
            }
        });
        //实现颜色选择
        colorBtn = new JButton("颜色");
        colorBtn.addActionListener(this);
        //设置字体面板
        fontPanel.add(fontType);
        fontPanel.add(fontSize);
        fontPanel.add(boldBx);
        fontPanel.add(italicBx);
        fontPanel.add(colorBtn);
        //设置输入提示标签
        label = new JLabel("输入");
        //设置文本输入框
        inputText = new JTextField(30);
        inputText.addActionListener(this);
        //设置文本显示区
        txtArea = new JTextArea(10,80);
        txtArea.setFont(font);
        //设置文本面板
        showPanel = new JPanel();
        showPanel.add(label);
        showPanel.add(inputText);
        showPanel.setLayout(new FlowLayout());
        showPanel.add(new JScrollPane(txtArea));
        //设置容器
        Container container = getContentPane();
        container.setLayout(new BorderLayout());
        container.add(fontPanel,BorderLayout.NORTH);
        container.add(showPanel,BorderLayout.CENTER);
        setSize(500,300);
        setVisible(true);
    }

    public void actionPerformed(ActionEvent e){
        if(e.getSource() == colorBtn){//改变颜色
            colorStyle = JColorChooser.showDialog(this,"选择字体颜色",colorStyle);
            colorBtn.setForeground(colorStyle);
            txtArea.setForeground(colorStyle);
        }
        else if(e.getSource()==inputText){//将输入的文字在文字显示区表示
            txtArea.setText(inputText.getText());
        }
    }
    public static void main(String[] args){
        ArtFont artFont = new ArtFont();
        artFont.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}



  • 写回答

1条回答 默认 最新

  • 木子的木木 2020-06-24 23:09
    关注

    你可以尝试在设置字体之后调用repaint方法,我觉得应该是UI没有刷新的问题

    评论

报告相同问题?

悬赏问题

  • ¥15 C++使用Gunplot
  • ¥15 这个电路是如何实现路灯控制器的,原理是什么,怎么求解灯亮起后熄灭的时间如图?
  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 关于#r语言#的问题:差异分析前数据准备,报错Error in data[, sampleName1] : subscript out of bounds请问怎么解决呀以下是全部代码:
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)