LINUX.ORG.RU

Java, awt/swing, проблемы с фокусом.


0

0

Имеется вот такой код, если его переписать на Swing, баг так-же проявляется. Вообще-то проект на Свинге, этим кодом я проверял его наличие в AWT.
Проблема в том, что после того, как выполнится лисенер кнопки, фокус останется на второй кнопке, которая отключена, и останется он там намертво, никакими Tab/Sfift+Tab/Ctrl+tab/... его оттуда не вытащить.

package misc;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class AwtTest {

	/**
	 * @param args
	 */
	static Button b1,b2;
	public static void CaSGUI()
	{
		Frame f = new Frame();
		f.setLayout(new FlowLayout());
		b1 = new Button("B1");
		b2 = new Button("B2");
		f.add(b1);
		f.add(b2);
		f.add(new Button("B3"));
		b1.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				b1.setEnabled(false);
				b2.setEnabled(false);
				
			}});
		f.pack();
		f.setVisible(true);
		f.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e)
			{
				System.exit(0);
			 }});
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		EventQueue.invokeLater(new Runnable() {

			@Override
			public void run() {
				CaSGUI();
				
			}});
	}

}

Забавно, но если сделать так:
public void actionPerformed(ActionEvent e) {
				b1.setEnabled(false);
				b1.setFocusable(false);
				b2.setEnabled(false);
				b2.setFocusable(false);
				
			}});
бага не будет. Можно ещё отключать в обратном порядке. Есть ли ещё пути решения, так как эти - не всегда приемлимы. В документации по дефалтной Focus Traversal Policy сказано:
> The Component must be visible, displayable, and enabled to be accepted.

Врут, получается. Должно и без setFocusable() работать. Java с 1.4 по 1.6.

anonymous

Проверил, у меня такое же поведение и у этого куска кода и у аналогичного на свинге. Похоже на баг :/

Rikz ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.