2017-09-07 7 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을 차단하고, 당신의 배경 색상을 설정하려고 프레임 자체.

프레임이 숫자가 겹치는 구성 요소로 구성되어 있기 때문에 이제는 작동하지 않습니다. 그것이 contentPane 뒤에 숨겨진으로

The layers of a JFrame

프레임의 배경에 대한 변경 사항은 표시되지 않습니다.

대신 contentPane의 배경을 변경해야합니다.

그래,하지만 그건 첫 번째 문제 (JPanel)로 돌아갑니다. 이제, 당신은 JPanel에 인스턴스 필드를 확인하고는 ActionListener에 배경 색상의 변경이 작동 것이다, 또는 당신은 그것을 없애 수 있으며, 단순히 당신이 선택한 프레임의 contentPane이 들어

당신에게 달려 변경 될 수 있습니다 내 지나치게 단순화 된 예는, 나는 단순히 사용하기로 선택한 프레임의 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 나는 모든 컨테이너 내가

에 원한이 추가 다음 JPanel으로 시작 것, 하나의 유스 케이스로 당신을 잠그고 개인적으로

(getContentPane를 사용하지 같은) 프레임의 기능에 당신이 의존하게

+0

을 참조하십시오. 정말 고맙습니다! –

관련 문제