2011-08-09 3 views
3

저는 작은 프로젝트를 만들고 있는데 그 안에는 JFrame과 5 JButtons이 있습니다. 3 JButtons은 (는) 주요 관심사이며 기본적으로 사용하도록 설정되어 있습니다.특정 절에서 JButton을 비활성화하는 방법은 무엇입니까?

내가 원하는 것은 그 중 3 가지가 없으면 2의 나머지 부분은 비활성화 된 상태로 유지되어야합니다.

나는 ActionListner과 으로 시도했지만 아무 소용이 없습니다.

내가 시도한 여러 코드를 확인하십시오.

public void mousePressed (MouseEvent me){  
    if (me.getButton() == MouseEvent.NOBUTTON){ 

     proceedBtn.setEnabled(false); 
     proceedBtn.setToolTipText("Please Enter A Button Before Proceeding"); 
    } 
    else {     
     proceedBtn.setEnabled(true);   
    } 

} 

그리고 여기 제가 시도한 또 다른 코드가 있습니다.

public void mousePressed (MouseEvent me){  
    if (me.getClickCount == 0){ 

     proceedBtn.setEnabled(false); 
     proceedBtn.setToolTipText("Please click a button Before Proceeding"); 
    } 
    else {     
     proceedBtn.setEnabled(true);   
    } 

} 

여기서 내가 뭘 잘못하고 있니? 심지어 같은 코드에 대한 mouseClicked 메서드를 시도했지만 아무 일도 없었습니다. 된 MouseEvent의 getComponent

+0

'ActionListener'를 사용해야합니다. 이전에이 방법을 시도했지만 아무 소용이 없다고하셨습니까? 그 코드를 대신 보시나요? 'MouseListener'를 사용하는 것은 확실히 이것에 관해가는 길이 아닙니다. – mre

+0

아마도 먼저 푸시해야하는 버튼에 JCheckBoxes, JRadioBoxes 또는 JToggleButtons를 사용해야합니다. 이렇게하면 사용자와 프로그램은 그들이 밀렸는지 한눈에 알 수 있습니다. –

답변

4

JToggleButton 또는 그 자식 (JRadioButton 또는 JCheckBox) 중 하나와 같은 토글 유형의 단추로 코드를 작성하는 것이 더 나은지 궁금합니다.이 방법으로 사용자는 아래쪽 버튼이 선택되어 있는지 또는 "활성"상태인지 알 수 있습니다. 또한 사용자가 ButtonGroup 객체를 사용하여 세 개의 아래쪽 버튼 중 하나 이상이나 하나의 아래쪽 버튼 만 확인할 수 있는지 여부를 제어 할 수 있습니다. 예를 들어, 및 사과 부분적으로 (그의 대답에 대한 1+) 자신의 코드를 훔친 MRE하기 : 당신이 JToggleButtons이 코드를보고 싶은 경우,

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class JButtonDemo2 { 
    private static final String[] TOGGLE_NAMES = { "Monday", "Tuesday", 
     "Wednesday" }; 
    private JPanel mainPanel = new JPanel(); 
    private JButton leftButton = new JButton("Left"); 
    private JButton rightButton = new JButton("Right"); 

    private JToggleButton[] toggleBtns = new JToggleButton[TOGGLE_NAMES.length]; 

    public JButtonDemo2() { 
     JPanel topPanel = new JPanel(); 
     topPanel.add(leftButton); 
     topPanel.add(rightButton); 
     leftButton.setEnabled(false); 
     rightButton.setEnabled(false); 

     CheckListener checkListener = new CheckListener(); 
     JPanel bottomPanel = new JPanel(new GridLayout(1, 0, 5, 0)); 
     for (int i = 0; i < toggleBtns.length; i++) { 

     // uncomment one of the lines below to see the program 
     // with check boxes vs. radio buttons, vs toggle buttons 
     toggleBtns[i] = new JCheckBox(TOGGLE_NAMES[i]); 
     // toggleBtns[i] = new JRadioButton(TOGGLE_NAMES[i]); 
     // toggleBtns[i] = new JToggleButton(TOGGLE_NAMES[i]); 


     toggleBtns[i].setActionCommand(TOGGLE_NAMES[i]); 
     toggleBtns[i].addActionListener(checkListener); 
     bottomPanel.add(toggleBtns[i]); 
     } 

     mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.PAGE_AXIS)); 
     mainPanel.add(topPanel); 
     mainPanel.add(bottomPanel); 
    } 

    public JComponent getMainComponent() { 
     return mainPanel; 
    } 

    public void enableTopButtons(boolean enable) { 
     leftButton.setEnabled(enable); 
     rightButton.setEnabled(enable); 
    } 

    private class CheckListener implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
     for (JToggleButton checkBox : toggleBtns) { 
      if (checkBox.isSelected()) { 
       enableTopButtons(true); 
       return; 
      } 
     } 
     enableTopButtons(false); 
     } 

    } 

    private static void createAndShowGui() { 
     JFrame frame = new JFrame("JButtonDemo2"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().add(new JButtonDemo2().getMainComponent()); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      createAndShowGui(); 
     } 
     }); 
    } 
} 

을 JCheckBoxes을 만드는 줄을 주석하고 행의 주석을 해제하는 JToggleButtons를 만듭니다

 // toggleBtns[i] = new JCheckBox(TOGGLE_NAMES[i]); 
    // toggleBtns[i] = new JRadioButton(TOGGLE_NAMES[i]); 
    toggleBtns[i] = new JToggleButton(TOGGLE_NAMES[i]); 

을 마찬가지로 당신이 JRadioButtons 만 JRadioButton의 라인의 주석을 해제하고 다른 두 개의 주석을 사용하여 프로그램을보고 싶어합니다.

-2

시도 :

if(mouseEvent.getComponent() == aButton) { 

} 

Docs

+0

마우스 수신기를 사용하는 이유는 무엇입니까? –

+0

그가 게시 한 내용을 기반으로 도움을 제공하려고했기 때문에. – Geo

+0

이것은 작동하지 않습니다. 이전에 시도했습니다. – Shashwat

0

는 일반적으로 활성 버튼에 마우스 리스너를 넣어보십시오. 이렇게하면 활성화되었을 때 정상적으로 비활성 버튼을 활성화 할 수 있습니다. 또한 앱이 처음 시작될 때 일반적으로 비활성 버튼이 사용 중지되도록 설정합니다.

+0

^^ 그들은 현재 3 개의 버튼에서만 설정되어 있습니다. 다른 2 개의 버튼에 리스너를 지정하지 않았습니다. – Shashwat

+0

다시, jbutton과 함께 마우스 리스너를 사용하지 마십시오. 아래로 투표했다. –

+0

네 제안은 정말로 효과가 있었고 처음에는 단추를 사용하지 못하게했습니다. 작업은 매우 간단했습니다.하지만 모두가 제안한대로 ActionListener를 계속 사용합니다 :) 감사 : – Shashwat

3

귀하의 버튼에 actionListeners을 조사 할 수 있다고 생각합니다.

그러면 처음 세 개의 버튼 중 하나를 클릭하면 if 진술을 .setenabled = true으로 할 수 있습니다.

나는 그 (것)들을 이전에했지만 어떻게 편안하게하려고 노력하고있는가. 나보다 잘 설명 할 수있는 튜토리얼과 약간의 코드가 포함되어 있습니다.

예 :

JButtonOne.addActionListener(new ButtonHandler();) 

private class ButtonHandler implements ActionListener{ 
public void actionPerformed(ActionEvent event) { 

//write your if statement or call a method etc here 

} 
} 

Actionlistener Tutorial

6

당신은 ActionListener 클래스를 이해할 필요가있다. @harper89이 제안 했으므로 How to Write an Action Listener에 대한 자습서가 있습니다. 또한 서브 클래스 JButton을 추천합니다. 이는 소스에 대해 ActionEvent을 쿼리하는 것보다 적절합니다.


다음은 예입니다 -

public final class JButtonDemo { 
    private static DisabledJButton disabledBtnOne; 
    private static DisabledJButton disabledBtnTwo; 

    public static void main(String[] args){ 
     SwingUtilities.invokeLater(new Runnable(){ 
      @Override 
      public void run() { 
       createAndShowGUI();    
      } 
     }); 
    } 

    private static void createAndShowGUI(){ 
     final JFrame frame = new JFrame(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     final JPanel panel = new JPanel(); 
     panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); 

     final JPanel disabledBtnPanel = new JPanel(); 
     disabledBtnOne = new DisabledJButton(); 
     disabledBtnTwo = new DisabledJButton(); 
     disabledBtnPanel.add(disabledBtnOne); 
     disabledBtnPanel.add(disabledBtnTwo); 
     panel.add(disabledBtnPanel); 

     final JPanel enablerBtnPanel = new JPanel(); 
     enablerBtnPanel.add(new EnablerJButton("Button 1")); 
     enablerBtnPanel.add(new EnablerJButton("Button 2")); 
     enablerBtnPanel.add(new EnablerJButton("Button 3")); 
     panel.add(enablerBtnPanel); 

     frame.add(panel); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    private static final class DisabledJButton extends JButton{ 
     public DisabledJButton(){ 
      super("Disabled"); 
      setEnabled(false); 
     } 
    } 

    private static final class EnablerJButton extends JButton{ 
     public EnablerJButton(final String s){ 
      super(s); 
      addActionListener(new ActionListener(){ 
       @Override 
       public void actionPerformed(ActionEvent e) { 
        if(!disabledBtnOne.isEnabled()){ 
         disabledBtnOne.setEnabled(true); 
         disabledBtnOne.setText("Enabled"); 
        } 

        if(!disabledBtnTwo.isEnabled()){ 
         disabledBtnTwo.setEnabled(true); 
         disabledBtnTwo.setText("Enabled"); 
        } 
       } 
      }); 
     } 
    } 
} 

enter image description here


당신이 비활성화 버튼의 세 가지 활성화 버튼 중 하나를 모두 귀하의 요청에 따라 활성화 될 것입니다을 누르면.

+0

고마워 :) 그것은 효과가 : D 조 – Shashwat

관련 문제