2013-05-22 2 views
0

저는 자바에 대해 아주 익숙하며, 제가하려고하는 것을 달성하기 위해 사용할 수있는 방법을 알지 못합니다. 전등 스위치를 시뮬레이트하는 프로그램을 만들어야합니다. 조명을 켜고 끄는 버튼 하나. 이벤트가 시작되기 전에 배경색을 진회색으로 설정하고 시작된 후 배경색이 노란색으로 설정됩니다. 내가 가지고있는 문제는 배경이 노란색 일 때 어떻게 같은 버튼을 사용하여 어두운 회색으로 다시 바꿀 수 있습니까?하나의 JButton에 두 가지 다른 액션을 부여하십시오.

내 코드 :

import javax.swing.JApplet; 
import javax.swing.JButton; 
import java.awt.Color; 
import java.awt.Container; 
import java.awt.FlowLayout; 
import java.awt.Graphics; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

public class Question2 extends JApplet implements ActionListener { 
    public void init() { 
     Container contentPane = getContentPane(); 
     contentPane.setBackground(Color.DARK_GRAY); 

     contentPane.setLayout(new FlowLayout()); 

     JButton OnOffSwitch = new JButton("On/Off"); 
     contentPane.add(OnOffSwitch); 
     OnOffSwitch.addActionListener(this);  
    } 

    public void actionPerformed(ActionEvent e) { 
     Container contentPane = getContentPane(); 

     if (e.getActionCommand().equals("On/Off")) 
      contentPane.setBackground(Color.YELLOW); 
     else 
      contentPane.setBackground(Color.DARK_GRAY); 
    } 
} 
+2

*

JToggleButton with icons

"오프에 빛을 켜고 하나 개의 버튼을 클릭합니다."*이에 대한'JToggleButton' 또는'JCheckBox'를 사용합니다. –

+1

*'JApplet' * 애플릿을 코딩하는 이유는 무엇입니까? 사양으로 인해 예정된 경우. 선생님이 [왜 CS 교사가 Java 애플릿 교육을 중단해야하는지] (http://programmers.blogoverflow.com/2013/05/why-cs-teachers-should-stop-teaching-java-applets/)를 참조하십시오. –

+0

부울은가는 길입니다 (@andrew가 제안한 것을 따르는 것이 더 낫습니다). 실제로 여러분은 올바른 길을 가고있었습니다. 'On/Off'라는 레이블을 사용하는 대신'Turn On'으로 레이블을 초기화 할 수 있었고'TurnPan'과 같은 것으로 발견되면'actionPerformed'에서 레이블을 노란색으로 변경하고 새 레이블은 '꺼짐'으로 표시됩니다. 그것을 사용하지 않는 것이 좋습니다, 이것은 단지 당신의 지식을 위해서였습니다 :) – Nikhil

답변

2

actionPerformed

public void actionPerformed(ActionEvent e) 
{ 
    Container contentPane = getContentPane(); 

    if (!on) { 
      contentPane.setBackground(Color.YELLOW); 
      on = true; 
    } 
    else { 
     contentPane.setBackground(Color.DARK_GRAY); 
     on = false; 
    } 
} 
+0

그래서 JToggleButton 또는 JCheckedBox를 설명했습니다. – MadProgrammer

+0

OP는 'JButton'의 경우에 그것을 처리하는 방법을 물었습니다. 미안하지만이 것을 이해하지 못했습니다. – sanbhat

3

예를 들어, 같은 플립 로직 뭔가를 A boolean 필드 false

boolean on = false; 

과에 on 세트라고 되세요 (this answer의 이미지 사용).

import java.awt.*; 
import javax.swing.*; 
import javax.imageio.ImageIO; 
import java.net.URL; 

class ToggleButtons { 

    public static void main(String[] args) throws Exception { 
     URL offUrl = new URL("http://i.stack.imgur.com/gJmeJ.png"); 
     URL onUrl = new URL("http://i.stack.imgur.com/5v2TX.png"); 
     final Image offImg = ImageIO.read(offUrl); 
     final Image onImg = ImageIO.read(onUrl); 
     Runnable r = new Runnable() { 

      @Override 
      public void run() { 
       int s = 5; 
       JPanel gui = new JPanel(new GridLayout(s, s)); 
       Icon offIcon = new ImageIcon(offImg); 
       Icon onIcon = new ImageIcon(onImg); 

       for (int ii=0; ii<s*s; ii++) { 
        JToggleButton tb = new JToggleButton(offIcon, ii%2==0); 
        tb.setSelectedIcon(onIcon); 
        gui.add(tb); 
       } 

       JOptionPane.showMessageDialog(null, gui); 
      } 
     }; 
     // Swing GUIs should be created and updated on the EDT 
     // http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html 
     SwingUtilities.invokeLater(r); 
    } 
} 
+1

'URL'을 통해 이미지에 액세스하기위한 +1; 이 관련 [예제] (http://stackoverflow.com/a/6036048/230513)도 참조하십시오. – trashgod

관련 문제