質問するログイン新規登録
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

1578閲覧

メッセージダイアログのメッセージの改行(初心者です)

umano.u-tam

総合スコア3

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2023/10/16 03:57

0

0

実現したいこと

ここに実現したいことを箇条書きで書いてください。

  • 該当箇所のメッセージダイアログのメッセージを3行表示にしたい。

前提

ここに質問の内容を詳しく書いてください。
javaもGUIも初心者です。デフォルトのフォントの時は(\n)で改行できていたのですが、カスタムフォントに変更したところ、改行が適応されなくなりました。改行も方法を知りたいです。
■■な機能を実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

package game.operation;

import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.DecimalFormat;

import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.SwingUtilities;
import javax.swing.Timer;

public class Event1 extends GameEvent {

private Timer animationTimer; private Timer progressBarTimer; private Font customFont = new Font("遊ゴシック体 M", Font.PLAIN, 15); @Override public void event1() { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { closeFrame(null); JFrame frame = new JFrame(); frame.setTitle("スキャン中..."); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(600, 200); frame.setLocationRelativeTo(null); JLabel label = new JLabel(); label.setFont(customFont); label.setAlignmentX(JLabel.CENTER_ALIGNMENT); JProgressBar progressBar = new JProgressBar(0, 100); progressBar.setFont(customFont); progressBar.setStringPainted(true); progressBar.setOrientation(JProgressBar.HORIZONTAL); JPanel spacePanel = new JPanel(); spacePanel.add(Box.createVerticalStrut(10)); JPanel panel = new JPanel(); panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); panel.add(label); panel.add(spacePanel); JPanel progressBarPanel = new JPanel(); progressBarPanel.setLayout(new BoxLayout(progressBarPanel, BoxLayout.X_AXIS)); progressBarPanel.add(Box.createHorizontalGlue()); progressBarPanel.add(progressBar); progressBarPanel.add(Box.createHorizontalGlue()); panel.add(progressBarPanel); panel.add(Box.createVerticalStrut(50)); frame.add(panel); frame.setVisible(true); animationTimer = new Timer(500, new ActionListener() { private int dotCount = 0; @Override public void actionPerformed(ActionEvent e) { String dots = ".".repeat(dotCount % 4) + " ".repeat(3 - dotCount % 4); String text = "テスト中" + dots; label.setText(text); dotCount++; } }); animationTimer.setInitialDelay(0); animationTimer.start(); progressBarTimer = new Timer(100, new ActionListener() { private int progress = 0; @Override public void actionPerformed(ActionEvent e) { if (progress < 100) { progress += 1; progressBar.setValue(progress); DecimalFormat df = new DecimalFormat("0"); String progressText = df.format(progress) + "%"; progressBar.setString(progressText); } else { progressBarTimer.stop(); animationTimer.stop(); // アニメーションを停止 int result = showConfirmationDialog("テストメッセージです。\nこちらは3行表示にしたいです。\nうまくいきませんが。。"); if (result == JOptionPane.OK_OPTION) { event2(); } else { int scanAgainResult = showConfirmationDialog("テストメセージ?"); if (scanAgainResult == JOptionPane.OK_OPTION) { event1(); } else { actionPerformed(null); } } } } }); progressBarTimer.setInitialDelay(0); progressBarTimer.start(); } }); } @Override public void event2() { // Event2 の処理を記述 } @Override public void event3() { // Event3 の処理を記述 } private int showConfirmationDialog(String message) { JLabel label = new JLabel(message); label.setFont(customFont); Object[] options = { "OK", "Cancel" }; int result = JOptionPane.showOptionDialog( null, label, "メッセージ", JOptionPane.OK_CANCEL_OPTION, JOptionPane.INFORMATION_MESSAGE, null, options, options[0]); return result; }

}

java

試したこと

HTMLでの解決方法等調べることができましたが、HTML以外の方法があればと考えまして、質問しました。

補足情報(FW/ツールのバージョンなど)

Eclipse2022
ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2023/10/16 05:37

extends している GameEvent クラスというのはどのようなモノでしょうか。 どこからどこまでがコードか分かり難いです。 コードのマークダウン(「```java」と「```」の行で前後を囲む)をご利用ください。
TN8001

2023/10/16 09:21

> デフォルトのフォントの時は(\n)で改行できていたのですが、カスタムフォントに変更したところ、改行が適応されなくなりました。改行も方法を知りたいです。 setFontのあるなしで変わるということですか!? 前はHTMLだっただけではありませんか?
guest

回答2

0

JLabel は短い "ラベル" の為のものですので、改行が必要になるような "文章" には JTextPane を使うのが良いように思います。

既存のプロジェクトに組み込んだままではテストがし難いです。
テスト用のプロジェクト等を別に作ってテストすることをお勧めします。

DialogTest.java

java

1import java.awt.Font; 2 3import javax.swing.*; 4 5public class DialogTest extends JFrame { 6 public static void main(String[] args) { 7 SwingUtilities.invokeLater(() -> new DialogTest().setVisible(true)); 8 } 9 10 private Font customFont = new Font("遊ゴシック体 M", Font.PLAIN, 15); 11 12 DialogTest() { 13 super("TEST"); 14 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 15 16 setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS)); 17 18 String text = "テストメッセージです。\nこちらは3行表示にしたいです。\nうまくいきませんが。。"; 19 20 JButton button1 = new JButton("show dialog of JLabel"); 21 button1.addActionListener(v -> showConfirmationDialog(createMessageOfLabel(text))); 22 add(button1); 23 24 JButton button2 = new JButton("show dialog of JTextPane"); 25 button2.addActionListener(v -> showConfirmationDialog(createMessageOfTextPane(text))); 26 add(button2); 27 28 pack(); 29 setLocationRelativeTo(null); 30 } 31 32 private JComponent createMessageOfLabel(String text) { 33 return new JLabel(text); 34 } 35 36 private JComponent createMessageOfTextPane(String text) { 37 JTextPane textPane = new JTextPane(); 38 textPane.setOpaque(false); //背景を透明にする 39 textPane.setFocusable(false); //フォーカスを当たらなくする(文字列のコピー等も出来ない) 40 textPane.setText(text); 41 return textPane; 42 } 43 44 private int showConfirmationDialog(JComponent message) { 45 message.setFont(customFont); 46 47 Object[] options = { "OK", "Cancel" }; 48 49 int result = JOptionPane.showOptionDialog( 50 this, message, "メッセージ", JOptionPane.OK_CANCEL_OPTION, 51 JOptionPane.INFORMATION_MESSAGE, null, options, options[0]); 52 53 return result; 54 } 55}

実行時表示
JLabel
JLabel でのダイアログ
JTextPane
JTextPane でのダイアログ

投稿2023/10/16 07:31

編集2023/10/16 08:04
jimbe

総合スコア13382

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

umano.u-tam

2023/10/16 12:44

ご回答ありがとうございます。 ご教授いただいた方法を試したところうまくいきました! JTextPaneを知らなかったので非常に勉強になります。 重ね重ねですがありがとうございました。
guest

0

diff

1 animationTimer.stop(); // アニメーションを停止 2- int result = showConfirmationDialog("テストメッセージです。\nこちらは3行表示にしたいです。\nうまくいきませんが。。"); 3+ int result = showConfirmationDialog("テストメッセージです。\r\nこちらは3行表示にしたいです。\r\nうまくいきませんが。。"); 4 if (result == JOptionPane.OK_OPTION) {

\n -> \r\n

投稿2023/10/16 04:20

shiketa

総合スコア4139

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2023/10/16 07:44 編集

私の環境(Windows10, java17)では改行されませんでした…。
umano.u-tam

2023/10/16 12:46

どちらも試したのですが、私の環境(Windows11, java11,java17)でも改行できませんでした。
shiketa

2023/10/17 01:30

わたしの回答は、完全に的外れでした。無視してください。 jimbeさんの回答、JTextPaneの利用で、わたしの環境(Windows10 + Java17)では改行され表示されました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問