2013-10-27 98 views
0

我正在編寫Java代碼以顯示學生在班級中的成績。我有一個小問題。我想使用兩個滑塊,一個調整文本(輸出)字體大小,另一個滑塊調整字母之間的間距。例如,當我在標有#of Grade As的JLabel框中輸入數字'5'時,按下按鈕「Display output as a string of letters」,我得到結果:「Grade As:AAAAA。 「我想要做的(如上所述)是調整字母A的大小,並調整連續字母A之間的間距。有人可以告訴我如何做到這一點。我當然知道我必須建立一個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(); 

     } 

一旦我得到的最後一行,詮釋大小= slider.getValue(),我不知道該怎麼辦。請記住,我有兩件事要做。一個是調整字母的大小,另一個是調整字母之間的間距,因此我需要兩個滑塊。有人可以幫忙嗎?

+0

而不是直接一個'Graphics'對象上繪製的,它可能是更好的只是添加字母'在兩者之間間隔對象JLabel's - 那麼你可以在'JLabel's上調用'setFont'來設置高度,並在你的'stateChanged'方法中調整spacer對象的大小。 –

+0

這是我不會想到的。這很聰明。多謝 ! – JCDyson

回答

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

對不起間距我做這個工作,

+0

你好Deepak,謝謝你的子程序。我不太熟悉子組件的遞歸,我將不得不在Java書中查找它。同時,我將複製並粘貼您的子程序到我的程序中,並查看它的功能。再次感謝。 – JCDyson

+0

我編輯了答案,看看它 –

+1

你好Deepak,你的子程序工作,我得到我需要的結果。謝了哥們 ! – JCDyson