Path: csiph.com!usenet.pasdenom.info!weretis.net!feeder4.news.weretis.net!newsfeed.tele2net.at!news.panservice.it!feed.xsnews.nl!border02.ams.xsnews.nl!feeder04.ams.xsnews.nl!feeder02.ams.xsnews.nl!frontend-F09-15.ams.news.kpn.nl From: Cecil Westerhof Newsgroups: comp.lang.java.programmer Subject: Re: Disabling generated buttons Organization: Decebal Computing References: <874mr41ox9.fsf@Equus.decebal.nl> X-Face: "(y8cC@tg_12{">GF'UXTW]FHI2wMiZNrnf'1EFQ&O#$m:f#O7+7}kR,v+Pti8=Vi/Z"g^?b"E X-Homepage: http://www.decebal.nl/ Date: Mon, 02 Feb 2015 15:16:44 +0100 Message-ID: <87vbjkz9df.fsf@Equus.decebal.nl> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.2 (gnu/linux) Cancel-Lock: sha1:2Ns2mrPyqMRZzDLHPReVC1PWr5U= MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Lines: 92 NNTP-Posting-Host: 77.171.42.144 X-Trace: 1422887336 news.kpn.nl 19713 77.171.42.144@kpn/77.171.42.144:37419 Xref: csiph.com comp.lang.java.programmer:31011 Op Monday 2 Feb 2015 13:24 CET schreef Cecil Westerhof: > I defined the following class: > private enum Colours { > Blue(Color.BLUE), > Red(Color.RED), > Orange(Color.ORANGE), > Yellow(Color.YELLOW), > Green(Color.GREEN), > Cyan(Color.CYAN), > Magenta(Color.MAGENTA), > Brown(new Color(0x9C, 0x5D, 0x52)), > ; > > private final Color value; > > Colours(Color value) { > this.value = value; > } > > public Color value() { > return value; > } > } > > I use it to add some (Swing) buttons: > for(int i = 0; i < Colours.values().length; ++i) { > final Colours colour = Colours.values()[i]; > > JButton jButton = new JButton("" + colour); > > add(jButton, gbc); > jButton.addActionListener(new ActionListener() { > public void actionPerformed(ActionEvent e) { > checkColour(colour); > } > }); > gbc.gridx++; > if( gbc.gridx == 3 ) { > gbc.gridy++; > gbc.gridx = 0; > } > } > > Those buttons are used to select a colour. But when the wrong colour > is selected I want to disable all the buttons for half a second. > (Otherwise people could just click very fast at random.) > How would I do this? I hoped that there was a ‘smart’ way, but probably not. So I implemented it in the ‘dumb’ way. I created a variable to hold them all: private JButton colourButtons[] = new JButton[Colours.values().length]; I changed the generating into: for(int i = 0; i < Colours.values().length; ++i) { final Colours colour = Colours.values()[i]; JButton jButton = new JButton("" + colour); colourButtons[i] = jButton; add(jButton, gbc); jButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { checkColour(colour); } }); gbc.gridx++; if( gbc.gridx == 3 ) { gbc.gridy++; gbc.gridx = 0; } } And in checkColour I put the following code: javax.swing.Timer timer = new javax.swing.Timer(500, new ActionListener() { public void actionPerformed(ActionEvent e) { setEnabledColourButtons(true); } }); setEnabledColourButtons(false); timer.setRepeats(false); timer.start(); This does what I want. -- Cecil Westerhof Senior Software Engineer LinkedIn: http://www.linkedin.com/in/cecilwesterhof