実現したいこと
ここに実現したいことを箇条書きで書いてください。
- 該当箇所のメッセージダイアログのメッセージを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
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー