Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

rsacramento

melhorar o código

Mensagens Recomendadas

rsacramento

a aplicação que mostro a seguir funciona tal qual eu quero: se a tecla CAPS estiver ligada então a aplicação mostra que sim, tendo um label a dizer CAPS; caso alterne, o label também, e por aí fora

contudo tenho código duplicado e não sei como optimizá-lo

já li o how to Use Actions dos sun java tutorials mas fiquei mais ou menos na mesma

alguém tem alguma ideia?

obrigado antecipadamente

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

public class PanelPrincipal extends JPanel {
static final String CAPS_SELECCIONADO = "clicado";
static final String CAPS_LOCK = "CAPS_LOCK";
JPanel panel, rodape;
Action capsAction;
JLabel labelCaps;
static final Toolkit toolkit = Toolkit.getDefaultToolkit();

public PanelPrincipal() {
	super();

	// sem isto não funciona
	capsAction = new AbstractAction() {
		public void actionPerformed(ActionEvent e) {
			rodape = (PanelRodape)e.getSource();
			labelCaps = (JLabel)rodape.getComponent(0);

			if (toolkit.getLockingKeyState(KeyEvent.VK_CAPS_LOCK))
				labelCaps.setText("CAPS");
			else
				labelCaps.setText("");
		}
	};

	povoaPanel();
	criaGui();
}

public void povoaPanel() {
	rodape = new PanelRodape();
	labelCaps = (JLabel)rodape.getComponent(0);

	// faz o esquema funcionar desde o arranque
	if (toolkit.getLockingKeyState(KeyEvent.VK_CAPS_LOCK))
		labelCaps.setText("CAPS");
	else
		labelCaps.setText("");

	rodape.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)
		.put(KeyStroke.getKeyStroke(CAPS_LOCK), CAPS_SELECCIONADO);
	rodape.getActionMap().put(CAPS_SELECCIONADO, capsAction);

	setLayout(new BorderLayout());
	add(new JScrollPane(new JTable(2, 2)));
	add(rodape, BorderLayout.PAGE_END);
}

private void criaGui() {
	JFrame frame = new JFrame("CAPS ligado?");
	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	frame.getContentPane().add(this);
	frame.pack();
	frame.setLocationRelativeTo(null);
	frame.setVisible(true);
}

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

class PanelRodape extends JPanel {
public PanelRodape() {
	add(new JLabel());
}
}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.