2011-08-09 28 views
3

我正在做一個小項目,並在其中我有一個JFrame與5 JButtons。 3 JButtons是主要關注的問題,並且默認啓用。如何在某些子句上禁用JButton?

我想要的是,除非任何3 JButtons被按下,其餘的2應該保持禁用。

我試過ActionListnerMouseListener但無濟於事。

檢查我試過的多個代碼。

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方法,但沒有發生任何事情。

+0

你應該使用'ActionListener'。你說過你以前試過這個,但無濟於事。記住,如果我們看到代碼呢?使用'MouseListener'絕對不是解決這個問題的方法。 – mre

+0

也許你應該使用JCheckBoxes,JRadioBoxes或JToggleButtons作爲必須首先推送的按鈕。通過這種方式,用戶和程序一眼就能知道他們是否被推送。 –

回答

4

我不知道如果你的代碼會更好的切換類型的按鈕,如JToggleButton或它的一個孩子(JRadioButton或JCheckBox)。這樣用戶可以看到下面的按鈕是否被選擇或「活動」。這也允許您控制用戶是否可以檢查三個底部按鈕中的一個或多個按鈕,或只檢查一個底部按鈕(通過使用ButtonGroup對象)。例如,並且道歉MRE爲部分偷了他的代碼(1+他的回答):

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(); 
     } 
     }); 
    } 
} 

如果你想看到這個代碼JToggleButtons,然後註釋掉創建JCheckBoxes行並取消註釋行如果你想看到的節目與JradioButton將取消註釋只有一個JRadioButton線和評論其他兩個

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

同理:創建JToggleButtons。

-2

嘗試的MouseEvent的getComponent

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

} 

Docs

+0

爲什麼使用鼠標監聽器? –

+0

因爲我試圖根據他發佈的內容提供幫助。 – Geo

+0

這是行不通的,我早些時候試過 – Shashwat

0

嘗試把你的鼠標監聽器上的正常活動的按鈕。這樣,當他們激活時,他們可以啓用通常不活動的按鈕。另外,當應用程序第一次啓動時,將通常不活動的按鈕設置爲禁用。

+0

^^它們現在只在3個按鈕中設置。我還沒有將聽衆分配給其他2個按鈕。 – Shashwat

+0

再次,不要使用jbuttons鼠標監聽器。下投票。 –

+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