0

我正在编写一个 Java 代码来显示班级学生所取得的成绩。我有一个小问题。我想使用两个滑块,一个用于调整文本(输出)字体大小,另一个用于调整字母之间的间距。例如,当我在标记为#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(),我不知道该怎么做。记住,我有两件事要做。一个是调整字母的大小,另一个是调整字母之间的间距,因此我需要两个滑块。有人可以帮忙吗?

4

1 回答 1

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

对不起间距我正在努力

于 2013-10-28T06:36:51.170 回答