質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.50%
Java

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

Q&A

2回答

5008閲覧

javaで文字を左から右に一文字ずつ表示する方法がわかりません。

musashi0505

総合スコア10

Java

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

0グッド

0クリップ

投稿2019/02/09 10:39

前提・実現したいこと

今javaでノベルゲームを作っているのですが、文字を左から右に流したいのですが、やり方が全く分かりません。どのようにすればよいのでしょうか、教えてください。
ちなみにjavaを始めてからまだ1か月くらいしかたってないので分からないことが沢山あるのですが、どうぞよろしくお願い致します。

試したこと

二日くらいかけて、文字を流す方法を調べていろいろサンプルコードは出てきたのですが、どの部分を書けばよいのか分からず何をしていいか分からなかったので質問させていただきました。

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

eclipseのバージョン4.5を使用しています。
javax.swingで作っています。

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

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

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

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

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

jimbe

2019/02/09 15:41 編集

↓こういうことでしょうか? https://nompor.com/2017/12/23/post-1901/ なにも分からないのでは何も答えられないと思います. いろいろ出てきたと言われているサンプルを一つずつ実行し, その中で一番近いと思われるものを改造し, まだ思っている動作イメージでは無いと判断されたら, 動作イメージとの違いのご説明と共に, 改造したコードを提示してください. それによりまして, 回答する側もイメージとの違いを実際に見ることが出来, 問題箇所を判断できると思います.
guest

回答2

0

このようなことかと思います.

java

1import javax.swing.JFrame; 2import javax.swing.JTextArea; 3import javax.swing.SwingUtilities; 4import javax.swing.WindowConstants; 5 6public class NovelText extends JFrame { 7 public static void main(String[] args) { 8 JFrame frame = new NovelText(); 9 frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 10 frame.setSize(500, 400); 11 frame.setVisible(true); 12 } 13 NovelText() { 14 super(); 15 16 JTextArea textArea = new JTextArea(); 17 textArea.setEditable(false); 18 getContentPane().add(textArea); 19 20 setTalking(textArea, "じゅげむ じゅげむ ごこうのすりきれ\n" + 21 "かいじゃりすいぎょの すいぎょうまつ\n" + 22 "うんらいまつ ふうらいまつ\n" + 23 "くうねるところに すむところ\n" + 24 "やぶらこうじの ぶらこうじ\n" + 25 "パイポパイポ\n" + 26 "パイポのシューリンガン\n" + 27 "シューリンガンのグーリンダイ\n" + 28 "グーリンダイのポンポコピーのポンポコナーの\n" + 29 "ちょうきゅうめいのちょうすけ"); 30 } 31 void setTalking(final JTextArea textArea, final String text) { 32 Thread thread = new Thread(new Runnable() { 33 @Override 34 public void run() { 35 try { 36 int index = 0; 37 while(true) { 38 textArea.append(text.substring(index, index+1)); 39 if(++index >= text.length()) break; 40 Thread.sleep(300); //[ms] 41 } 42 } catch (InterruptedException ignore) { 43 } 44 } 45 }); 46 thread.start(); 47 } 48}

投稿2019/02/10 11:23

jimbe

総合スコア12545

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

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

musashi0505

2019/02/10 17:12 編集

そうです!これをやりたかったのですが、以下のソースでもやる際にもJTextAreaは使えるのでしょうか? ```java import java.awt.CardLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; public class Gamen2 extends JFrame{ static String test = "test"; //タイトル static Gamen2 mainjf; static JPanel mainjp; static CardLayout cl; JPanel titlejp; //タイトル画面のパネル final static String titleKey = "Title"; JPanel mainGamejp; //ゲーム本編のパネル final static String mainGameKey = "Gamen"; JPanel loadjp; //セーブしたデータをロードするパネル final static String loadKey = "Load"; JPanel option; //オプション画面のパネル final static String optionKey = "Option"; Font font; GridBagLayout gbl; GridBagConstraints gbc; public static void main(String[] args){ mainjf = new Gamen2(); } Gamen2(){ super(test); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); mainjp = (JPanel) getContentPane(); ImageIcon mojinoseruImage = new ImageIcon(getClass().getClassLoader().getResource("文字のせるやつ3.png")); titlejp = new JPanel(); gbl = new GridBagLayout(); gbc = new GridBagConstraints(); titlejp.setLayout(gbl); titlejp.setBackground(Color.WHITE); mainGamejp = new JPanel(); mainGamejp.setLayout(gbl); mainGamejp.setBackground(Color.lightGray); JLabel mojinoserujl = new JLabel(mojinoseruImage); gbc.gridx = 3; gbc.gridy = 4; gbc.gridwidth = 2; gbc.gridheight = 2; gbc.weighty = 1.0d; gbc.anchor = GridBagConstraints.SOUTH; gbc.insets = new Insets(10, 50, 1, 50); gbl.setConstraints(mojinoserujl, gbc); mainGamejp.add(mojinoserujl); JButton start = new JButton("start"); gbc.gridx = 0; gbc.gridy = 4; gbc.gridwidth = 2; gbc.gridheight = 2; gbc.weighty = 1.0d; gbc.anchor = GridBagConstraints.SOUTH; gbc.fill = GridBagConstraints.HORIZONTAL; gbc.insets = new Insets(0, 70, 50, 50); gbl.setConstraints(start, gbc); start.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { cl.show(mainjp, mainGameKey); } }); JButton load = new JButton("LOAD"); gbc.gridx = 3; gbc.gridy = 4; gbc.gridwidth = 2; gbc.gridheight = 2; gbc.weighty = 1.0d; gbc.anchor = GridBagConstraints.SOUTH; gbc.insets = new Insets(10, 50, 50, 50); gbl.setConstraints(load, gbc); JButton option = new JButton("OPTION"); gbc.gridx = 6; gbc.gridy = 4; gbc.gridwidth = 2; gbc.gridheight = 2; gbc.weighty = 1.0d; gbc.anchor = GridBagConstraints.SOUTH; gbc.insets = new Insets(10, 50, 50, 0); gbl.setConstraints(option, gbc); JButton exit = new JButton("EXIT"); gbc.gridx = 9; gbc.gridy = 4; gbc.gridwidth = 2; gbc.gridheight = 2; gbc.weightx = 1.0d; gbc.fill = GridBagConstraints.NONE; gbc.anchor = GridBagConstraints.SOUTHEAST; gbc.insets = new Insets(10, 20, 50, 30); gbl.setConstraints(exit, gbc); exit.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { mainjf.dispose(); } }); titlejp.add(start); titlejp.add(load); titlejp.add(option); titlejp.add(exit); mainjp.setPreferredSize(new Dimension(750, 470)); cl = new CardLayout(); mainjp.setLayout(cl); mainjp.add(titlejp, titleKey); mainjp.add(mainGamejp, mainGameKey); pack(); setVisible(true); } }
jimbe

2019/02/10 18:48

提示できるコードがあるのでしたら, ご質問時に提示しておいて頂きたいです. JTextArea で良いかどうかは作者さんの判断でお願いします. 何をしていいか分からないということでしたので, 『別スレッドで一文字ずつ追加表示すれば良いのでは』というサンプルのつもりです. JLabel でも可能と思いますが, メインメソッド以外からの画面の更新(で無くても, マルチスレッドは大抵)は少々デリケートですので, ご注意ください. また, 回答致しましたコードは, 恐らくこのままではゲームとしては使えません. setTalking メソッドは, 一文字ずつ表示するスレッドを起動すると即戻ります. つまり, 文字列がいつ表示し終わるのか分かりません. 表示し終わる前にまた setTalking を呼び出しますと, 混ざって表示されていきます. 解決方法はゲームの仕様次第で変わりますので, 合った方法をお探しください.
guest

0

こんな感じでしょうか。
下記はコンソールへ標準出力するプログラムです。

  • 文字列を1文字ずつ配列に分割し、for文で1文字ずつ表示しています。
  • 表示するときに指定した時間だけ処理を停止しています。
  • dispSpeedMsec の値を変えることで表示スピードを変えることができます。

Java

1public class Main { 2 3 public static void main( String[] args ) throws InterruptedException { 4 5 // 表示したい文章 6 String text = "吾輩は猫である。名前はまだないよ〜〜〜。"; 7 8 // 文章の表示スピード(ミリ秒) 9 int dispSpeedMsec = 100; 10 11 // 文章表示実行 12 showText( text, dispSpeedMsec ); 13 14 } 15 16 private static void showText( String text, int dispSpeedMsec ) throws InterruptedException { 17 String[] textArray = text.split( "" ); 18 19 for( int i = 0; i < textArray.length; i++ ){ 20 // 文字を表示 21 System.out.print( textArray[ i ] ); 22 23 // dispSpeedMsecの時間だけ処理を停止 24 Thread.sleep( dispSpeedMsec ); 25 } 26 27 } 28 29} 30

投稿2019/02/09 13:19

編集2019/02/09 13:22
akit

総合スコア12

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

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

退会済みユーザー

退会済みユーザー

2019/02/10 11:50

html の MARQUEE のようなものがほしいようにも見えるが
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問