Eu tenho um sistema que exibe algumas abas de acordo com o que está no banco.
Como eu faço, por exemplo, se a aba X estiver mostrando na minha tela, executar um método?
Eu tenho um sistema que exibe algumas abas de acordo com o que está no banco.
Como eu faço, por exemplo, se a aba X estiver mostrando na minha tela, executar um método?
Acho que para o JTabbedPane (é isso que você está usando), provavelmente você tem de chamar o método getModel().addChangeListener() passando um ChangeListener para ele.
Você poderia me dar um exemplo bem claro?
Sou novo em java
Rode o exemplo abaixo.
package guj;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class ExemploEventosJTabbedPane extends JFrame {
private JTabbedPane tabbedPane;
private JPanel panel;
private JLabel lblStatus;
private JPanel panel_1;
private JPanel panel_2;
private JPanel panel_3;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
ExemploEventosJTabbedPane frame = new ExemploEventosJTabbedPane();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public ExemploEventosJTabbedPane() {
setTitle("Exemplo Evento JTabbedPane");
setBounds(100, 100, 450, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().add(getTabbedPane(), BorderLayout.CENTER);
getContentPane().add(getPanel(), BorderLayout.SOUTH);
}
private JTabbedPane getTabbedPane() {
if (tabbedPane == null) {
tabbedPane = new JTabbedPane(JTabbedPane.TOP);
tabbedPane.addTab("Aba 1", null, getPanel_1(), null);
tabbedPane.addTab("Aba 2", null, getPanel_2(), null);
tabbedPane.addTab("Aba 3", null, getPanel_3(), null);
// Aqui está o seu ChangeListener que responde ao evento de mudar a aba
tabbedPane.getModel().addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
// note que a primeira aba tem índice zero, e assim por diante
int index = tabbedPane.getModel().getSelectedIndex() + 1;
getLblStatus().setText(String.format("A aba %d foi selecionada", index));
}
});
}
return tabbedPane;
}
private JPanel getPanel() {
if (panel == null) {
panel = new JPanel();
panel.add(getLblStatus());
}
return panel;
}
private JLabel getLblStatus() {
if (lblStatus == null) {
lblStatus = new JLabel("Clique em uma das abas");
}
return lblStatus;
}
private JPanel getPanel_1() {
if (panel_1 == null) {
panel_1 = new JPanel();
}
return panel_1;
}
private JPanel getPanel_2() {
if (panel_2 == null) {
panel_2 = new JPanel();
}
return panel_2;
}
private JPanel getPanel_3() {
if (panel_3 == null) {
panel_3 = new JPanel();
}
return panel_3;
}
}
Humm, mas no meu sistema, quando eu apertar um botao, ele tem que verificar quais abas estao ativas e executar um metodo pra cada aba, entendeu?
Se quiser mais detalhes, consulte:
http://docs.oracle.com/javase/tutorial/uiswing/components/tabbedpane.html
http://www.exampledepot.com/search/luceneapi_node/jtabbedpane
Se você tem dificuldades com a língua inglesa, use o Google Translator ( http://translate.google.com ) ou o Bing Translator ( http://www.microsofttranslator.com/ )