fork download
  1. /*
  2. http://d...content-available-to-author-only...o.jp/qa/question_detail/q12114447672
  3. */
  4. import java.awt.event.*; //ボタン(イベント)の処理に必要
  5.  
  6. import javax.swing.*; //GUIを使う場合に必要
  7.  
  8. class FrameStep4 extends JFrame implements ActionListener {
  9.  
  10.  
  11. //上の行でエラーが出るときは以下を書く
  12. private static final long serialVersionUID = 1L;
  13.  
  14. JLabel label1; //ラベルをオブジェクト変数として定義
  15. JButton button1; //3つのボタン:オブジェクト変数として定義
  16. JButton button2; //ここに書かれた変数はクラスのどこからでも使える
  17. JButton button3;
  18. // コンストラクタ
  19. FrameStep4(String title) { //title:タイトルバーに表示する文字列
  20. super(title); //フレームを実際に作る
  21. /*----------------------変更--------------------------*/
  22. //setSize(450,300); //フレームサイズの設定
  23. setSize(450,350); //フレームサイズの設定
  24. /*----------------------------------------------------*/
  25. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//[x]ボタンでフレームを閉じる
  26. setLocationByPlatform(true); //開始時の表示位置はOSに任せる
  27. setLayout(null); //レイアウトなし
  28.  
  29. //ラベルの生成と配置
  30. label1 = new JLabel("九州の県はどれでしょう!");
  31. label1.setBounds(10 ,10, 180, 30);
  32. add(label1);
  33.  
  34. /*----追加----*/
  35. label1=null;//現在の仕様では、label1とは独立のlabel2を用意すべきなのですが
  36. //フィールドをなるべく追加しないようにした為にここでnullに設定しています。
  37. /*------------*/
  38.  
  39. //ボタンの生成と配置
  40. button1 = new JButton("福岡県");
  41. button1.setBounds(10, 100, 120, 30);
  42. add(button1);
  43. button2 = new JButton("島根県");
  44. button2.setBounds(160, 100, 120, 30);
  45. add(button2);
  46. button3 = new JButton("栃木県");
  47. button3.setBounds(310, 100, 120, 30);
  48. add(button3);
  49.  
  50. //ボタンが押された時のイベントをキャッチする
  51. button1.addActionListener(this);
  52. button2.addActionListener(this);
  53. button3.addActionListener(this);
  54. }
  55.  
  56. public static void main(String[] args) { //メインメソッド
  57. FrameStep4 frame = new FrameStep4("九州の県はどれでしょう!");
  58. frame.setVisible(true);
  59. }
  60.  
  61. //ボタンが押されたとき(イベント発生時)に呼び出されるメソッド
  62. public void actionPerformed(ActionEvent e){
  63. //イベントから押されたらボタンを得る
  64. JButton b = (JButton)e.getSource();
  65. String s = b.getText(); //ボタンのメッセージを得る
  66. System.out.println("["+s+"]ボタンが押されました"); //表示
  67.  
  68. /*-----変更------*/
  69. // if(getSource() == "福岡県"){
  70. if( b.getText().equals("福岡県") ){
  71. // if(b==button1){ //現在の仕様ならばこれでもOK
  72. /*---------------*/
  73.  
  74. /*------追加-----*/
  75. if(label1==null){//この条件のもとでaddしないとボタンを押すたびに
  76. //リソースが消費されてしまいますので
  77. //業務アプリの場合は確実に問題にされます
  78. /*---------------*/
  79. label1 = new JLabel("正解です");
  80. label1.setBounds(10, 250, 120, 30);
  81. add(label1);
  82. /*------追加-----*/
  83. repaint(1000); //このアプリの場合に限っては実質的にupdate( getGraphics() )
  84. //を呼び出しているだけですが
  85. //repaintを使ったほうが良いという指導がありましたので
  86. //これに修正します
  87. // update( getGraphics() );
  88. }
  89. /*---------------*/
  90. }
  91.  
  92. }
  93.  
  94.  
  95.  
  96.  
  97.  
  98. }
Runtime error #stdin #stdout #stderr 0.09s 381248KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
Exception in thread "main" java.awt.HeadlessException: 
No X11 DISPLAY variable was set, but this program performed an operation which requires it.
	at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:207)
	at java.awt.Window.<init>(Window.java:535)
	at java.awt.Frame.<init>(Frame.java:420)
	at javax.swing.JFrame.<init>(JFrame.java:224)
	at FrameStep4.<init>(Main.java:20)
	at FrameStep4.main(Main.java:57)