Mark7758
2020-06-22 23:18
采纳率: 25%
浏览 237

为什么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条回答 默认 最新

相关推荐 更多相似问题