2017-09-07 13 views
0

私は同様の質問をいくつか見てきましたが、この作業を行うことはできませんでした。私は時間を表示していて、4に数えてやり直すカウンタを追加しましたが、最初の背景色を設定することしかできません。私はここで何が欠けていますか? if文をいくつかの場所に置いてみました。色の変更を除くすべてがうまくいきます。フレームにJPanelを追加することによりボタンを押すたびにJPanelの背景色を変更しようとしています

import java.awt.Color; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.text.DateFormat; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 

public class TimeFrame extends JFrame { 
     private static final int FRAME_WIDTH = 250; 
     private static final int FRAME_HEIGHT = 200; 
     private JButton CurrentTime; 
     private JLabel CurrentTimeLabel; 
     private JTextField CurrentTimeField; 
     private int click; 
     private JTextField clicktest; 

     public TimeFrame() { 
      CurrentTimeLabel = new JLabel("The Current Time is: "); 

      createTextField(); 
      createButton(); 
      createPanel(); 

      setSize(FRAME_WIDTH, FRAME_HEIGHT); 
      setSize(250, 200); 
      initialize(); 


     } 
     private void initialize() 
     { 
     click = 0; 
     } 

     private void createTextField() 
     { 
      final int FIELD_WIDTH = 10; 
      CurrentTimeField = new JTextField(FIELD_WIDTH); 
      Date now = new Date(); 
      DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss"); 
      CurrentTimeField.setText("" + dateFormat.format(now)); 

      clicktest = new JTextField(FIELD_WIDTH); 
      clicktest.setText(" " + click); 

     } 
     private void createButton() 
     { 
      CurrentTime = new JButton("Display Current Time"); 

      ActionListener listener = new AddCurrentTimeListener(); 
      CurrentTime.addActionListener(listener); 

     } 
     private void createPanel() 
     { 
      JPanel panel = new JPanel(); 
      //panel.addActionListener(backgroundListener); 
      panel.add(CurrentTimeLabel); 
      panel.add(CurrentTimeField); 
      panel.add(CurrentTime); 
      panel.add(clicktest); 
      //int click = 0; 

      if (click == 0){ 
       panel.setBackground(Color.ORANGE); 
      } 
      else if (click == 1) { 
       panel.setBackground(Color.YELLOW); 
      } 
      else if (click == 2) { 
       panel.setBackground(Color.BLUE); 
      } 
      else if (click == 3) { 
       panel.setBackground(Color.GREEN); 
      } 
      else if (click == 4) { 
       panel.setBackground(Color.PINK); 
      } 

      add(panel); 

     } 

     class AddCurrentTimeListener implements ActionListener 
     { 
      public void actionPerformed(ActionEvent event){ 

       new java.util.Date(); 
       Date now = new Date(); 
       DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss"); 
       CurrentTimeField.setText("" + dateFormat.format(now));getClass();         
       if (click < 4){ 
        click++; 
       } else { 
        click = click - 4;} 

       clicktest.setText("" + click);getClass(); 

       /** 
       if (click == 0){ 
        panel.setBackground(Color.ORANGE); 
       } 
       else if (click == 1) { 
        panel.setBackground(Color.YELLOW); 
       } 
       else if (click == 2) { 
        panel.setBackground(Color.BLUE); 
       } 
       else if (click == 3) { 
        panel.setBackground(Color.GREEN); 
       } 
       else if (click == 4) { 
        panel.setBackground(Color.PINK); 
       } 
       */ 

       repaint(); 
       } 


      } 

} 
+0

バックグラウンドを変更するための 'createPanel'メソッドのすべてのロジックは、' ActionListener'ボタンに入る必要があります。実際にボタンをクリックすると、何かができます。 – MadProgrammer

+0

ようこそ。 https://stackoverflow.com/help/someone-answers – c0der

答えて

1

は、あなたがeffetelyあなたActionListenerにする以外は、特に問題ではなく、自分自身の中で、これをフレームcontentPaneをブロックしている、あなたはの背景色を設定しようとしていますフレームそのもの。

フレームが複数の重複するコンポーネントで構成されているため、これは機能しません。

The layers of a JFrame

それはcontentPaneの背後に隠されていますように、フレームの背景への変更は、表示されません。

代わりにcontentPaneの背景を変更する必要があります。

さて、それは最初の問題(JPanel)に戻ります。さて、あなたはインスタンスフィールドJPanelを作り、それがActionListenerに背景色だと、これはうまくいく、またはあなたはそれを取り除くと、単にあなたが選択したフレームのcontentPaneを、変更を受ける可能性が変更される可能性はあなた次第私のために

です、過度に単純化した例は、Iは、単に使用することを選択したフレームのcontentPaneそれはあなたがフレームについて学ぶ必要がある重要な概念を示していて...

import java.awt.Color; 
import java.awt.EventQueue; 
import java.awt.FlowLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.text.DateFormat; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JTextField; 

public class TimeFrame extends JFrame { 

    public static void main(String args[]) { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       new TimeFrame().setVisible(true); 
      } 
     }); 
    } 

    private JButton currentTime; 
    private JLabel currentTimeLabel; 
    private JTextField currentTimeField; 
    private int click; 
    private JTextField clicktest; 

    public TimeFrame() { 
     currentTimeLabel = new JLabel("The Current Time is: "); 

     createTextField(); 
     createButton(); 
     createPanel(); 

     pack(); 
     setLocationRelativeTo(null); 
     initialize(); 

    } 

    private void initialize() { 
     click = 0; 
    } 

    private void createTextField() { 
     final int FIELD_WIDTH = 10; 
     currentTimeField = new JTextField(FIELD_WIDTH); 
     Date now = new Date(); 
     DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss"); 
     currentTimeField.setText("" + dateFormat.format(now)); 

     clicktest = new JTextField(FIELD_WIDTH); 
     clicktest.setText(" " + click); 

    } 

    private void createButton() { 
     currentTime = new JButton("Display Current Time"); 

     ActionListener listener = new AddCurrentTimeListener(); 
     currentTime.addActionListener(listener); 

    } 

    private void createPanel() { 
     setLayout(new FlowLayout()); 
     //panel.addActionListener(backgroundListener); 
     add(currentTimeLabel); 
     add(currentTimeField); 
     add(currentTime); 
     add(clicktest); 
    } 

    class AddCurrentTimeListener implements ActionListener { 

     public void actionPerformed(ActionEvent event) { 

      new java.util.Date(); 
      Date now = new Date(); 
      DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss"); 
      currentTimeField.setText("" + dateFormat.format(now)); 
      getClass(); 
      if (click < 4) { 
       click++; 
      } else { 
       click = click - 4; 
      } 

      clicktest.setText("" + click); 

      if (click == 0) { 
       getContentPane().setBackground(Color.ORANGE); 
      } else if (click == 1) { 
       getContentPane().setBackground(Color.YELLOW); 
      } else if (click == 2) { 
       getContentPane().setBackground(Color.BLUE); 
      } else if (click == 3) { 
       getContentPane().setBackground(Color.GREEN); 
      } else if (click == 4) { 
       getContentPane().setBackground(Color.PINK); 
      } 
      repaint(); 
     } 

    } 

} 

免責事項:個人的に

、私は直接拡張避けるだろうJFrameから、私はtは、単一のユースケースにあなたをロックし、フレームの機能にあなたが依存します(getContentPaneを使用するために持っているような)個人的に

、私はJPanelで始まり、その後、すべてのコンテナは、私が

に何を望むかにこれを追加したいです
+0

パーフェクト!どうもありがとうございます! –

関連する問題