java - 如何使用 slider 调整成绩字母的字体大小和间距

标签 java swing jslider

我正在编写一段 Java 代码来显示类(class)学生取得的成绩。我有一个小问题。我想使用两个 slider ,一个用于调整文本(输出)字体大小,另一个 slider 用于调整字母之间的间距。例如,当我在标有 #of Grade As 的 JLabel 框中输入数字“5”,然后按下“将输出显示为字母字符串”按钮时,我得到的结果是:“Grade As : AAAAA。 ”我想做的(如上所述)是调整字母 A 的大小,并调整连续字母 As 之间的间距。有人可以告诉我该怎么做吗?我当然知道我必须设置一个 JSlider,但是我到底该怎么做呢?我的部分代码如下:

          if ( e.getSource() == displayChartButton ) {

          checkAndRecordData();

          Graphics g = chartPanel.getGraphics();

          g.setColor(Color.white);
          g.fillRect(20,20,410,52);
          g.setColor(Color.black);
          g.drawRect(20,20,410,52);
          g.setColor( Color.black );
          g.drawString( "Grade As: " + gradeAs, chartLeftXA, chartTopYA );

      }

          if (e.getSource() == displayLongString) {

          Graphics g = chartPanel.getGraphics(); 

          g.setColor(Color.white);
          g.fillRect(20,20,410,52);
          g.setColor(Color.black);
          g.drawRect(20,20,410,52);
          g.setColor( Color.black );
          g.drawString( "Grade As: " + longStringA, 100, 50 );

       }

          private void checkAndRecordData() {

          gradeAs = tempAs;

          longStringA = "";
          String gradeLetterA = "A";
          for (int i=0; i<tempAs; i++) 
          longStringA += gradeLetterA;
       }


          public void stateChanged(ChangeEvent event) {
          int size = slider.getValue();

       }

当我到达最后一行 int size = slider.getValue() 时,我不知道该怎么做。记住,我有两件事要做。一是调整字母的大小,二是调整字母之间的间距,因此我需要两个 slider 。有人可以帮忙吗?

最佳答案

您可以通过子组件的递归轻松完成

  public static void changeFont(Component component, int fontSize) {
        Font f = component.getFont();
        component.setFont(new Font(f.getName(), f.getStyle(), f.getSize() + fontSize));
        if (component instanceof Container) {
            for (Component child : ((Container) component).getComponents()) {
                changeFont(child, fontSize);
            }
        }
    }

您甚至可以为子组件设置自己的字体或字体大小 通过获取组件的名称

public static void changeFont(Component component, int fontSize) {
        Font f = component.getFont();
        component.setFont(new Font(f.getName(), f.getStyle(), f.getSize() + fontSize));
        if (component instanceof Container) {
            for (Component child : ((Container) component).getComponents()) {
                if(child.getName().equals("myComponentName")){
                //set font to the component
                }else{
                changeFont(child, fontSize);
                }
            }
        }
    }

并从事件中调用此方法,就像这里我发布的那样,它将如何随着 slider 值的变化而改变字体大小 其中 sldValue 是我的全局变量,用于存储旧的 slider 值

if (!((JSlider) evt.getSource()).getValueIsAdjusting()) {
            changeFont(this, sldFontSet.getValue() - sldValue);
            sldValue = sldFontSet.getValue();
        }

对间距感到抱歉,我正在努力

关于java - 如何使用 slider 调整成绩字母的字体大小和间距,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19617612/

相关文章:

java - Java 中的可选条件运算符导致 NullPointerException

java - Android 系统 OnDestroy my Activity 在后台

java - 设计模式建议

java - 动态改变JLabel图标

java - 设置 JFileChooser 打开当前目录

java - JTextField被清除后停止使用MaskFormatter

java - JButton Action 监听器问题。字段中显示的 slider 值

java - Eclipse 插件的名称是否无关紧要,只要驻留在plugins/目录中并且只要其内容有效?

jquery - 自动更改 JSlide

java - 在 Java 中将动态变量与线程一起使用