• 締切済み

文字サイズが可変のラベル

ウインドウ上に同サイズのJLabelを設置する。ラベル上には(プログラム上で書き換える、つまり固定の)文字が書かれており、その文字をウインドウサイズに応じて、サイズ変更できるようにする。この時、文字の縦横比を維持する場合と、維持せずにウインドウめいっぱいまで文字を伸張する場合の2通り作る。 という課題なのですが、できるのかどうかさえ分からない状態です。通常だと文字サイズは固定なのでウインドウを大きくすると文字は小さいままです。どうやってウインドウのサイズ変更に対応することができるのでしょうか? どうぞよろしくお願いします。

  • Java
  • 回答数4
  • ありがとう数2

みんなの回答

  • zozy
  • ベストアンサー率60% (20/33)
回答No.4

2文字以上にすると文字の幅がラベルの幅をオーバーしてしまうからと思われます。 文字とウィンドウの隙間が大きくなるのは、フォントサイズとウィンドウとの比が維持されてるからです。 後者のみ解決できたのでそのソースコードを張っておきます。 import java.awt.BorderLayout; import java.awt.Font; import java.awt.event.MouseWheelEvent; import java.awt.event.MouseWheelListener; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.SwingConstants; import javax.swing.WindowConstants; public class ChangeFont extends JFrame{ String str="A"; JLabel label=new JLabel(str); int size=300; int length=str.length()-1; public ChangeFont(){ setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); label.setFont(new Font("MS UI Gothic",0,size)); label.setHorizontalAlignment(SwingConstants.CENTER); label.addMouseWheelListener(new MouseWheelListener() { public void mouseWheelMoved(MouseWheelEvent evt) { labelMouseWheelMoved(evt); } }); getContentPane().add(label,BorderLayout.CENTER); pack(); } private void labelMouseWheelMoved(MouseWheelEvent evt){ if(evt.getWheelRotation()==1){ size++; } if(evt.getWheelRotation()==-1){ size--; } if(length!=0){ this.setSize(size*length,size); label.setSize(size*length,size); }else{ this.setSize(size,size); label.setSize(size,size); } label.setFont(new Font("MS UI Gothic",0,size)); } public static void main(String args[]){ new ChangeFont().setVisible(true); } }

sainte
質問者

お礼

ありがとうございます やはり文字のほうは無理だったのでしょうか?

  • zozy
  • ベストアンサー率60% (20/33)
回答No.3

マウスホイールを回転させるとサイズがかわるものを作りました。 import java.awt.BorderLayout; import java.awt.Font; import java.awt.event.MouseWheelEvent; import java.awt.event.MouseWheelListener; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.SwingConstants; import javax.swing.WindowConstants; public class ChangeFont extends JFrame{ JLabel label=new JLabel("A"); int size=300; public ChangeFont(){ setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); label.setFont(new Font("MS UI Gothic",0,size)); label.setHorizontalAlignment(SwingConstants.CENTER); label.addMouseWheelListener(new MouseWheelListener() { public void mouseWheelMoved(MouseWheelEvent evt) { labelMouseWheelMoved(evt); } }); getContentPane().add(label,BorderLayout.CENTER); pack(); } private void labelMouseWheelMoved(MouseWheelEvent evt){ if(evt.getWheelRotation()==1){ size++; } if(evt.getWheelRotation()==-1){ size--; } this.setSize(size,size); label.setSize(size,size); label.setFont(new Font("MS UI Gothic",0,size)); } public static void main(String args[]){ new ChangeFont().setVisible(true); } }

sainte
質問者

補足

ありがとうございます 確かにマウスホイールによって動的にサイズ変更が行われます しかし、ウインドウサイズが大きくなるにつれて、文字とウインドウの隙間がかなり大きくなってしまっています。 また、文字数を2文字以上にすると正しく表示されません。 なぜでしょうか?

  • zozy
  • ベストアンサー率60% (20/33)
回答No.2

ソースコードに誤りがありました。 申し訳ないです。 下記のものが誤りを訂正したソースになります。 import java.awt.event.ComponentEvent; import javax.swing.GroupLayout; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.SwingConstants; import javax.swing.WindowConstants; public class ChangeFont extends JFrame{ JLabel label=new JLabel("A"); int fontSize=300; public ChangeFont(){ setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); label.setFont(new java.awt.Font("MS UI Gothic",0,fontSize)); label.setHorizontalAlignment(SwingConstants.CENTER); label.addComponentListener(new java.awt.event.ComponentAdapter(){ public void componentResized(ComponentEvent evt){ labelComponentResized(evt); } }); GroupLayout layout=new GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(GroupLayout.Alignment.LEADING) .addComponent(label,0,300,2000)); layout.setVerticalGroup( layout.createParallelGroup(GroupLayout.Alignment.LEADING) .addComponent(label,0,300,2000)); pack(); } private void labelComponentResized(java.awt.event.ComponentEvent evt){ fontSize=(Integer.parseInt(evt.paramString().substring(23,26)) +Integer.parseInt(evt.paramString().substring(27,30)))/2; label.setFont(new java.awt.Font("MS UI Gothic",0,fontSize)); } public static void main(String args[]) { new ChangeFont().setVisible(true); } }

sainte
質問者

補足

(上の補足からの続きです) これはlabelComponentResizedメソッド内を private void labelComponentResized(java.awt.event.ComponentEvent evt) {     fontSize=(Integer.parseInt(evt.paramString().substring(23,26))         +Integer.parseInt(evt.paramString().substring(28,30)))/2;         label.setFont(new java.awt.Font("MS UI Gothic",0,fontSize)); } と修正することで防げたのですがべつの例外も発生しています Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "9)"     at java.lang.NumberFormatException.forInputString(Unknown Source)     at java.lang.Integer.parseInt(Unknown Source)     at java.lang.Integer.parseInt(Unknown Source)     at ChangeFont.labelComponentResized(ChangeFont.java:41)     at ChangeFont.access$0(ChangeFont.java:38)     at ChangeFont$1.componentResized(ChangeFont.java:20)     at java.awt.Component.processComponentEvent(Unknown Source)     at java.awt.Component.processEvent(Unknown Source)     at java.awt.Container.processEvent(Unknown Source)     at java.awt.Component.dispatchEventImpl(Unknown Source)     at java.awt.Container.dispatchEventImpl(Unknown Source)     at java.awt.Component.dispatchEvent(Unknown Source)     at java.awt.EventQueue.dispatchEvent(Unknown Source)     at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)     at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)     at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)     at java.awt.EventDispatchThread.pumpEvents(Unknown Source)     at java.awt.EventDispatchThread.pumpEvents(Unknown Source)     at java.awt.EventDispatchThread.run(Unknown Source)

  • zozy
  • ベストアンサー率60% (20/33)
回答No.1

完全にご要望に沿うものではないですが、文字の縦横比を維持しないほうのプログラムができました。 ヒントかなにかにしてもらえると幸いです。 なお、ソースコードでわかりづらい点がございましたら、返信ください。 import java.awt.event.ComponentEvent; import javax.swing.GroupLayout; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.SwingConstants; import javax.swing.WindowConstants; public class ChangeFont extends JFrame{ JLabel label=new JLabel("A"); int fontSize=300; public ChangeFont(){ setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); label.setFont(new java.awt.Font("MS UI Gothic",0,fontSize)); label.setHorizontalAlignment(SwingConstants.CENTER); label.addComponentListener(new java.awt.event.ComponentAdapter(){ public void componentResized(ComponentEvent evt){ labelComponentResized(evt); } }); GroupLayout layout=new GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(GroupLayout.Alignment.LEADING) .addComponent(label,0,300,2000)); layout.setVerticalGroup( layout.createParallelGroup(GroupLayout.Alignment.LEADING) .addComponent(label,0,300,2000)); pack(); } private void labelComponentResized(java.awt.event.ComponentEvent evt){ fontSize=(Integer.parseInt(evt.paramString().substring(23,26)) +Integer.parseInt(evt.paramString().substring(27,30)))/2; label.setFont(new java.awt.Font("MS UI Gothic",0,fontSize)); } public static void main(String args[]) { new Frame2().setVisible(true); } }

sainte
質問者

補足

早速ありがとうございます しかしながら例外が発生しています Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "x74"     at java.lang.NumberFormatException.forInputString(Unknown Source)     at java.lang.Integer.parseInt(Unknown Source)     at java.lang.Integer.parseInt(Unknown Source)     at ChangeFont.labelComponentResized(ChangeFont.java:41)     at ChangeFont.access$0(ChangeFont.java:38)     at ChangeFont$1.componentResized(ChangeFont.java:20)     at java.awt.Component.processComponentEvent(Unknown Source)     at java.awt.Component.processEvent(Unknown Source)     at java.awt.Container.processEvent(Unknown Source)     at java.awt.Component.dispatchEventImpl(Unknown Source)     at java.awt.Container.dispatchEventImpl(Unknown Source)     at java.awt.Component.dispatchEvent(Unknown Source)     at java.awt.EventQueue.dispatchEvent(Unknown Source)     at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)     at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)     at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)     at java.awt.EventDispatchThread.pumpEvents(Unknown Source)     at java.awt.EventDispatchThread.pumpEvents(Unknown Source)     at java.awt.EventDispatchThread.run(Unknown Source)

関連するQ&A

  • 写真サイズの変更

    Photoshop Elements6でホームページに載せる写真サイズ変更しているのですが・・・ 縦横比を固定しないで、ピクセル数の幅・高さを入力し縮小した場合横に広がって縮小されるのですが何か良い方法はないでしょうか? 縦横比を固定しないと、うまく縮小されないのでしょうか?

  • Power Point2007 表サイズ修正方法

    Power Point2007 を使用しております。 Excelで作成した表をいくつか貼り付けているのですが、 出力する用紙サイズを変更にともない 表をまとめて縮小したいと考えています。 それぞれ、縦横サイズの違う表を配置しているので、 縦横比そのままの%(パーセント)で縮小したいと 思うのですが方法がわかりません。 今まで、2003を使っていたので、 2007ですと勝手がわからず、ご質問しました。 一つ試した方法としては、 [表ツール] の [レイアウト] タブの [表のサイズ] で、 [高さ] ボックスと [幅] ボックスに目的のサイズを入力 [縦横比を固定する] チェック ボックスをオン こちらですと、縦横の数値を入れないといけないので まとめて同じバランスで縮小できませんでした。 そして、表は小さくなっても文字は大きいサイズのままのため 文字の大きさ以下には表のサイズが変更されませんでした。 文字も表の枠組みも一緒に縮小し、かつ %で縮小する方法がありましたら、教えていただきたいです。 宜しくお願い致します。

  • ImageMagickで横幅のピクセルを指定して元の画像と縦横比を維持してサイズ変更したい。

     お世話になっております。  ImageMagickで 横幅のピクセルのみを指定して 元の画像と縦横比を維持してサイズ変更したい  さらにImageMagickで横幅のピクセルのみを指定して 元の画像と縦横比を維持した サイズ変更後の縦幅のピクセルが何ドットか も取得したいのですが  よいコードの書き方はないでしょうか? Perl ImageMagick 数学に詳しい方、よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • photoshopelement 10 でサイズ変

    photoshopelement vir.7からvir.10にバージョンアップしました。 メールに画像を添付するため、サイズを縮小したいのですが、 7では簡単に行えたサイズ変更(ピクセルの変更)ができません。 HELPを見たのですが、全く理解できませんでした。 私は、縦横比を一定にした状態で、100~200kB程度にサイズ縮小したいのです。 7では横を700ピクセルに入力すると、縦も自動的に変更され、そのまま保存するだけでOKでした。 10では、縦横比一定ではサイズ変更ができず、縦横比のチェックを外すと、縦横それぞれの値を入力する必要があり、計算が必要になります。 これを簡単にできる方法を教えてください。 よろしくお願いします。

  • 文字サイズを変更しても元に戻ってしまいます

    タイトルどうりなのですが ネットやメールで、文字サイズが中文字なので毎回 ページ→文字サイズの変更→大 に変更して使っておりますが、次のウィンドウに移動するとまた戻っております。 大きい文字で固定できないのでしょうか? 困っております。 詳しい方ご指導ください。

  • オートシェイプの書式で縦横固定比について

    初心者で、MS2003WordExpertの勉強中です。お願いします。 オートシェイプでの書式を変更する場合があります。 問題(1)サイズ=150%にする(サイズ%のみの指定) ・・・・ と書いてあったら、 図の書式設定から→サイズタブの倍率の所で倍率を150%にする ◎このときは、縦横比のチェックを入れる→縦横比を150%と固定比にするため と解釈すると、縦横比のチェックを入れないときはどのような時でしょうか。 (サイズと角度の所の高さや、幅などを別々に50mm、60mmにするなどの時でしょうか。) 考えると、同じサイズタブの「サイズと角度」の所に実際に任意の文字を入力するときは、縦横比のチェックは外さなければならない・・と言う事でしょうか。 また、「倍率」と「サイズと角度」の相関関係がわかりません。 少し、押しなべてお教えくださると幸いです。 何卒よろしくお願い致します。

  • 文字サイズについて

    IEの表示→文字のサイズで変更できることは分かったのですが、それだと新しくウインドウを開くと、もう一度、表示→文字のサイズといったように変更しなくてはなりません。 一度のサイズ変更で、全てのページにおいて適用できる方法があれば教えてください。

  • フォトショップで縮小してサイズを決めるには?

    フォトショップで縮小してサイズを決めるには? 私のデジカメには、画質が2048×1558、1280×960,640×480の3種類あります。いろいろな画質でとった写真をフォトショップ7に取り込み、切り取りをしたあと、すべておなじサイズにするにはどうしたらいいのでしょうか。 [編集Menu]―[変形]―[拡大縮小]の操作をします。 すると画面上部にオプションバー(変形)が表示されます。 %の所には、「縦横比を固定」ボタンがありますが、その左のピクセル部には「縦横比を固定」ボタンがありません。たとえば、Xを200ピクセルに変更したら、Yも自動的にそれに対応して変更されるようにすることはできないのですか? あるいは、横を10センチにしたら、縦も自動的に決まるようにするにはどうしたらいいのでしょうか?

  • エクセルに画像を貼り付けるとセルにあわせたサイズにしかならず、大きさ調整すると形が変わってしまう

    エクセルシートにJPG形式の画像を貼り付けるのですが「挿入」-「ファイルから選択」でとりあえず配置した後、希望の大きさにマウスで調整しようとするのですが、セルにあわせたサイズにしかならず、画像の右下のハンドルでドラッグしても、元の形と変形してしまいます。 元通りの縦横比で貼り付けるにはどうすればいいのでしょうか。 画像の書式プロパティーを見ても縦横比を固定するにチェックが入っているのに数式バーのところに**%X**%と表示され、どんどん縦横比が変わってしまいます。 以前はちゃんとできており、また以前に作成したファイルを開いていじってみてもちゃんと縦横比固定されたまま変形できます。 急におかしくなってしまいました。しいて以前との違いをあげるとすると以前は大文字のJPG拡張子がついてた画像を貼り付けてたのを今回はなぜか小文字のjpg 拡張子になってる画像を貼り付けようとしているくらいでしょうか。 ちなみにエクセルは2003です

  • Internet Explorer8の文字サイズの固定

    いつもお世話になっております。 Internet Explorer8の文字サイズを最大で固定したいのですが、 変更しても、ブラウジングしていると「中サイズ」に変更されます。 文字を固定する方法があれば教えて下さい。

専門家に質問してみよう