如何使用滑块调整字体大小和等级字母的间距

时间:2013-10-27 11:37:43

标签: java swing jslider

我正在编写一个Java代码来显示班级学生已达到的成绩。我有一个小问题。我想使用两个滑块,一个用于调整文本(输出)字体大小,另一个滑块用于调整字母之间的间距。例如,当我在标记为#of Grade As的JLabel框中输入数字“5”时,按下按钮“显示输出为字母串”,我得到结果:“等级为: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(),我不知道该怎么做。记住,我有两件事要做。一种是调整字母的大小,另一种是调整字母之间的间距,因此我需要两个滑块。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

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

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

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

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

对于间距我很抱歉