
ウインドウ上に同サイズの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ランキング
-
eclipseに記述したjavaファイル...
-
<forEach> 内で供給された "ite...
-
JAVA 乱数で同じ数字を出さな...
-
HTMLでのTableタグデータ取得方法
-
JAVAのアプレットの文の改行方法。
-
Javaで常駐するソフトを作って...
-
JPEG画像のみを印刷したいので...
-
Java swing RTFファイル 文字化...
-
【JAVAエラー】互換性のない型...
-
Timestamp型への変換について(J...
-
?__mode=rssのRSSデータからト...
-
Android用ゲームを作っています。
-
c:importタグ内に、変数をセッ...
-
(急募)JavaカレンダーをGUI可に...
-
javaの代入演算式がうまくいき...
-
JTableでスクロールバーが表示...
-
フレームの×ボタンを押しても閉...
-
JavaMailについて
-
Javaで文字と数字が混ざったも...
-
動的配列が存在(要素が有る)か...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
eclipseに記述したjavaファイル...
-
「例外 *** は対応する try 文...
-
ColabでのPytorchのエラー
-
<forEach> 内で供給された "ite...
-
setAttribute(String, int)は適...
-
シャットダウンフックが呼ばれない
-
importするには java.io.*; imp...
-
python OpenPyXLを使って出力結...
-
Javaを使ってデジタル時計を作...
-
HTMLでのTableタグデータ取得方法
-
Java での グローバルIP取得
-
Xercesを使ったjavaでのXML解析
-
JavaMailについて
-
コンパイルができません…
-
GridBagLayoutについての質問
-
透過GIFの判定の仕方ありますか?
-
サーバーAからサーバーBへPOST...
-
ある年月の前月(月の開始日)...
-
jFrameを使って複数の画面を生...
-
文字列を数式に
おすすめ情報