![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
ウインドウ上に同サイズのJLabelを設置する。ラベル上には(プログラム上で書き換える、つまり固定の)文字が書かれており、その文字をウインドウサイズに応じて、サイズ変更できるようにする。この時、文字の縦横比を維持する場合と、維持せずにウインドウめいっぱいまで文字を伸張する場合の2通り作る。
という課題なのですが、できるのかどうかさえ分からない状態です。通常だと文字サイズは固定なのでウインドウを大きくすると文字は小さいままです。どうやってウインドウのサイズ変更に対応することができるのでしょうか?
どうぞよろしくお願いします。
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);
}
}
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);
}
}
この回答への補足
ありがとうございます
確かにマウスホイールによって動的にサイズ変更が行われます
しかし、ウインドウサイズが大きくなるにつれて、文字とウインドウの隙間がかなり大きくなってしまっています。
また、文字数を2文字以上にすると正しく表示されません。
なぜでしょうか?
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);
}
}
この回答への補足
(上の補足からの続きです)
これは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)
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);
}
}
この回答への補足
早速ありがとうございます
しかしながら例外が発生しています
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が見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Gmail 「Andoroidスマホ、Gmailで 文字の大きさの変更はどうすればいいのでしょうか?」 普段、文 1 2023/04/04 17:11
- Word(ワード) Wordでの印刷サイズについて A4の原稿をB5サイズで出力したいとき、 印刷から用紙サイズの指定か 4 2022/04/30 09:51
- その他(ブラウザ) Webサイトのフォントサイズを統一できないか 1 2023/06/28 11:11
- Outlook(アウトルック) Outlook 受信メールの文字サイズ変更 2 2022/10/14 14:41
- Illustrator(イラストレーター) イラストレーターでA3用のサイズでポスターを作成しましたが、B5サイズに縮め変更したいです。しかしB 4 2022/07/19 20:30
- その他(メールソフト・メールサービス) メールソフトを教えてください 1 2023/03/28 23:32
- 画像編集・動画編集・音楽編集 写真への文字の貼り付け 4 2023/04/06 18:39
- Excel(エクセル) 年末調整書類をExcel→スプレッドシートへ変換したい場合 2 2022/11/15 17:13
- PHP アンドロイドスマホでのphp echoの文字サイズ 1 2023/05/13 15:15
- Word(ワード) Word2019と365の互換性について質問 1 2023/06/10 19:33
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「例外 *** は対応する try 文...
-
eclipseに記述したjavaファイル...
-
ある年月の前月(月の開始日)...
-
setAttribute(String, int)は適...
-
なんかエラーがでた
-
java初心者です。座標取得と図...
-
GridBagLayoutについての質問
-
どうしてもプログラムが動いて...
-
文字列を数式に
-
(急募)Javaじゃんけんゲームで
-
AndroidStudio SQL文の値を取得...
-
importするには java.io.*; imp...
-
生年月日と今日の日付から年齢...
-
日数計算の方法
-
データの外挿について
-
アプレットを実行すると、×が表...
-
<forEach> 内で供給された "ite...
-
ファイル名を動的に生成したい
-
(急募) Java (CSVをしよう)一...
-
(大至急お願い。)Javaじゃんけ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「例外 *** は対応する try 文...
-
eclipseに記述したjavaファイル...
-
<forEach> 内で供給された "ite...
-
setAttribute(String, int)は適...
-
干支の計算で。。。
-
Javaを使ってデジタル時計を作...
-
HTMLでのTableタグデータ取得方法
-
importするには java.io.*; imp...
-
生年月日と今日の日付から年齢...
-
文字列を数式に
-
シャットダウンフックが呼ばれない
-
Javaで常駐するソフトを作って...
-
フレームの×ボタンを押しても閉...
-
Selenium IDEでexportしたコー...
-
文字サイズが可変のラベル
-
jFrameを使って複数の画面を生...
-
【java】検索フォームの検索結...
-
Java での グローバルIP取得
-
(急募)JavaカレンダーをGUI可に...
-
ファイル名を動的に生成したい
おすすめ情報