0

クラスの学生が達成した成績を表示するJavaコードを書いています。小さな問題があります。テキスト (出力) のフォント サイズを調整するスライダーと、文字間の間隔を調整するスライダーの 2 つのスライダーを使用したいと考えています。たとえば、#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() に到達すると、どうすればよいかわかりません。覚えておいてください、私にはやるべきことが2つあります。1 つは文字のサイズを調整することで、もう 1 つは文字間の間隔を調整することなので、2 つのスライダーが必要です。誰か助けてくれませんか?

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 に答える