Vinnaren i pepparkakshustävlingen!
2016-12-23, 15:46
  #1
Medlem
Som rubriken lyder försöker jag få en JLabel text att dyka upp efter att jag tryckt på min knapp men det är för mig jätte svårt att begripa hur, varför kan jag inte göra som följande kod beskriver? och hur ska jag istället gå till väga?

package ssp;
import javax.swing.*;
import java.awt.event.*;
public class Ssp {
private JLabel l1;
public Ssp(){
frame();
}
public void frame(){
JFrame f = new JFrame();
f.setSize(300, 300);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);

JLabel l1 = new JLabel("hej");
l1.setBounds(50,50,50,50);
JPanel p = new JPanel();
JButton b1 = new JButton("TRYCK HÄR");
p.add(b1);
f.add(p);
b1.addActionListener(new ActionListener(){


public void actionPerformed(ActionEvent e){

f.add(l1);

}
});


}
public static void main(String [] args){
Ssp sp = new Ssp();
sp.frame();
}

}
Citera
2016-12-23, 18:29
  #2
Medlem
bithaxs avatar
Efter f.add(l1) i action listener

Lägg till
f.revalidate();
f.repaint();

Ett annat bättre alternativ är att du gör f.add(l1) innan f.setVisible(true) men att du sätter l1.setVisible(false); innan du lägger till den. Sen i action listernen så gör du l1.setVisible(true);

Förhoppningsvis så behöver du inte kalla på revalidate() och repaint() då.
__________________
Senast redigerad av bithax 2016-12-23 kl. 18:37.
Citera
2016-12-24, 16:41
  #3
Moderator
MondoBizarros avatar
Övriga dator- och IT-diskussioner --> Java
/Moderator
Citera
2016-12-27, 21:16
  #4
Medlem
You call the method "frame" two times. Once in the constructor and once after you create an instance of the "Ssp" class in the "main(String[])" method.

The ActionListener you created adds the JLabel every time you click it. But you can only add a JComponent (the JLabel is a JComponent) to a Container (all JComponents are Containers) once.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback