Hej! Jag har precis börjat försöka sätta mig in i Java. Jag undrar hur man använder sig av ActionListener?? Jag har en combobox (swing) som jag fyller med namn och avslutar med: Du tar din klass och inkluderar ActionListener: Hej! Du använder egentligen ItemListener på samma sätt. Jag får fortfarande inte comboboxen att fungera som jag vill. När jag implementerat itemListener så lyckades jag inte trigga något event överhuvudtaget. Som sagt var, jag är nybörjare på java och har kanske missat något viktigt. Jag vill med System.out.println() skriva ut det namn som "Användaren" väljer ur combon, dvs ingen utskrift när combon fylls. Här är koden "ren", utan events...Hur funkar ActionListener??
jCboNamn.setSelectedIndex(-1);
Sedan vill jag printa det namn som användaren väljer ur combon. Jag har försökt göra detta med:
void jCboNamn_actionPerformed(ActionEvent e) {
System.out.println(jCboNamn.getSelectedItem());
}
Problemet är att detta event triggas även när combon fylls. Jag har förstått att man kan använda sig av sk actionlistetners men jag kan inte komma på hur man gör. Är det någon som kan förklara och kanske ge ett exempel??Sv: Hur funkar ActionListener??
<code>
public class Levsystem extends JFrame implements ActionListener
</code>
Sedan skapar du de objekt du vill ha en ActionListener på och lägger till ActionListener på dem:
<code>
//Skapar det som ska finnas på rad 4
bAvbryt = new Button("Avbryt");
this.laggTillKomponent(4,1,10, 10, 'W', bAvbryt, loginFonster);
bAvbryt.addActionListener(this);
bLoggaIn = new Button("Logga in");
this.laggTillKomponent(4,1,10, 10, 'E', bLoggaIn, loginFonster);
bLoggaIn.addActionListener(this);
</code>
Sist men inte minst använder du dig av de lyssnare du har skapat genom:
<code>
//Implemetation av ActionListener
public void actionPerformed(ActionEvent e){
if (e.getSource() == bAvbryt){
stangApp();
}else
if (e.getSource() == bStang){
stangApp();
}else
if (e.getSource() == bLoggaUt){
;
}else
if (e.getSource() == bSQL){
//Utför det SQL-uttryck som skrivivits in
ResultSet rs = utforSQL(tSQL.getText());
skrivUtRS(rs);
}else
if (e.getSource() == bLoggaIn){
//Läser in värdena som behövs i inloggningen
sID = tID.getText();
sPW = tPW.getText();
sDB = cDB.getItem(cDB.getSelectedIndex());
db = new Databas()
koppling = db.loggaIn(sID, sPW, sDB);
dolj(wLogin);
oppnaDatabasFonster()
skrivUtFelen(koppling);
lasInDBListor();
}
}// Slut actionPerformed
</code>
Hoppas att du hänger med eftersom jag bara klippt några kodsnuttar ur ett gammalt program för att exemplifiera...
//EmmaSv: Hur funkar ActionListener??
Jag testade ditt tips men ActionListener funkar inte som jag vill. Med ditt exempel kan jag bara hålla koll på vilken komponent som har utfört något, dvs jag kan skilja på en knapp och en combobox men ActionListener triggas även när comboboxen fylls. Jag vill att eventet enbart skall triggas när användaren väljer ett namn ur combon, inte när combon fylls. Jmfr med
<code>
Private Sub Combo1_Click() ' i VB
MsgBox Combo1.Text
End Sub
</code>
Som jag förstår så kan det kanske gå att använda ItemListener, men jag har inte lyckats lista ut hur man gör. Tipps emottages tacksamt =)Sv: Hur funkar ActionListener??
1. Du implementerar den i klassen
2. Du lägger in:
<code>
//Implementation av ItemListener
public void itemStateChanged(ItemEvent e){
if (e.getSource() == dinCombo){
//kolla eventTyp med getStateChange, vet tyvärr inte vad eventet heter.
}
</code>
3. Lägg till ItemListener på din combo på samma sätt som du lagt till ActionListeners på knapparna.
//EmmaSv: Hur funkar ActionListener??
<code>
package testproj;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class CFrame1 extends JFrame {
JPanel contentPane;
BorderLayout borderLayout1 = new BorderLayout();
JPanel jPanel1 = new JPanel();
JComboBox jComboBox1 = new JComboBox();
//Construct the frame
public CFrame1() {
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
//Fyller combon....
int i=1;
for(i=1;i<11;i++){
jComboBox1.addItem("Namn " +i);
}
jComboBox1.setSelectedIndex(-1);
}
//Component initialization
private void jbInit() throws Exception {
contentPane = (JPanel) this.getContentPane();
contentPane.setLayout(borderLayout1);
this.setSize(new Dimension(400, 300));
this.setTitle("Learning Java");
jPanel1.setLayout(null);
jComboBox1.setBackground(Color.white);
jComboBox1.setBounds(new Rectangle(57, 33, 286, 21));
contentPane.add(jPanel1, BorderLayout.CENTER);
jPanel1.add(jComboBox1, null);
}
//Overridden so we can exit when window is closed
protected void processWindowEvent(WindowEvent e) {
super.processWindowEvent(e);
if (e.getID() == WindowEvent.WINDOW_CLOSING) {
System.exit(0);
}
}
}
</code>