前提・実現したいこと
Java Swingでゲームのテキストのように文字を左から右に表示していくプログラムを考えています。
文章が最後まで表示される前にマウスをクリックすると文章を最後まで一気に表示し、その状態でもう一度クリックをすると次の文章が表示されるようにしたいです。
JPanelにJLabelをaddして、Timerとsubstring()を使ってsetTextで文章を表示しています。
他のクラスでボタンをクリックしたら該当のパネルが表示されるようにしています。
発生している問題・エラーメッセージ
しかし実行すると、一つ目の文章はうまく表示されますが、クリックして二つ目の文章を表示しようとすると、一つ目の文章の上に重なって表示されてしまいます。
どうしたらうまく表示することができるでしょうか?
該当のソースコード
Java
1コード 2import java.awt.BorderLayout; 3import java.awt.Color; 4import java.awt.Dimension; 5import java.awt.Font; 6import java.awt.Graphics; 7import java.awt.Image; 8import java.awt.Toolkit; 9import java.awt.event.*; 10import javax.swing.Timer; 11import javax.swing.JLabel; 12import javax.swing.JPanel; 13 14public class Panel2 extends JPanel implements ActionListener,MouseListener { 15 JLabel label; 16 JPanel textPanel; 17 static int i=0; 18 static int j=0; 19 Timer timer; 20 String text[] = { 21 "やああああああああああああ", 22 "やるおおおおおおおおおおお"}; 23 Image img = Toolkit.getDefaultToolkit().getImage(画像のパス); 24 25 public void paintComponent(Graphics g) { 26 super.paintComponent(g); 27 g.drawImage(img, 0, 0, this); 28 } 29 30 public Panel2() { 31 addMouseListener(this); 32 setLayout(new BorderLayout()); 33 34 textPanel = new JPanel(); 35 textPanel.setBackground(new Color(0,0,0,100)); 36 37 label = new JLabel(); 38 label.setBackground(new Color(0,0,0,0)); 39 label.setFont(new Font("MS ゴシック", Font.BOLD, 20)); 40 label.setForeground(Color.YELLOW); 41 label.setPreferredSize(new Dimension(900,100)); 42 label.setOpaque(true); 43 44 textPanel.add(label); 45 add(textPanel,BorderLayout.NORTH); 46 47 timer = new Timer(50 , this); 48 timer.start(); 49 } 50 51 public void actionPerformed(ActionEvent e) { 52 String textC = text[j].substring(0,i); 53 if(i==text[j].length()) { 54 timer.stop(); 55 }else { 56 label.setText(textC); 57 i++; 58 } 59 } 60 61 public void mouseClicked(MouseEvent e) { 62 if(i!=text[j].length()) { 63 label.setText(text[j]); 64 timer.stop(); 65 i=text[j].length(); 66 }else if(i==text[j].length()) { 67 if(j==0) { 68 i=0; 69 j++; 70 timer.restart(); 71 }else if(j==1) { 72 timer.stop(); 73 System.exit(0); 74 } 75 } 76 } 77 public void mousePressed(MouseEvent e) { 78 } 79 public void mouseReleased(MouseEvent e) { 80 } 81 public void mouseEntered(MouseEvent e) { 82 } 83 public void mouseExited(MouseEvent e) { 84 } 85} 86
試したこと
補足情報(FW/ツールのバージョンなど)
Java version 13.0.2
ここにより詳細な情報を記載してください。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。