Hallo zusammen.
Ich habe ein, wie ich denke, Verständnisproblem bzgl. JPanels/2D-Graphiken und Timern.
Szenario:
Ich habe ein JPanel, welcher dupliziert werden kann. Ich erstelle einfach mehrere Instanzen von dem Panel und adde jene zum JFrame. Damit das ganze nett aussieht, hat der Panel einen FadeIn-Effekt.
Realisiert ist dies durch eine paint()-Methode, die eine 2D-Graphik malt, also mein JPanel. Beim Erzeugen der JPanel-Instanz, starte ich in der JPanel-Klasse einen Timer, der alle 50 Millisekunden den Transparenzwert um 0.1 erhöht, bis er auf 1 ist.
Problem:
Ich möchte n-JPanels im JFrame erstellen können. Erzeugt werden jene später durch Events. Zum Testen habe ich das mit einem Button realisiert. Leider ist es jetzt so, dass sobald ich den Button klicke, der vorher erstellte JPanel verschwindet. Nehme ich die paint-Methode und den Timer aus der JPanel Klasse heraus, funktioniert es.
Jemand eine Idee?
Ich habe ein, wie ich denke, Verständnisproblem bzgl. JPanels/2D-Graphiken und Timern.
Szenario:
Ich habe ein JPanel, welcher dupliziert werden kann. Ich erstelle einfach mehrere Instanzen von dem Panel und adde jene zum JFrame. Damit das ganze nett aussieht, hat der Panel einen FadeIn-Effekt.
Realisiert ist dies durch eine paint()-Methode, die eine 2D-Graphik malt, also mein JPanel. Beim Erzeugen der JPanel-Instanz, starte ich in der JPanel-Klasse einen Timer, der alle 50 Millisekunden den Transparenzwert um 0.1 erhöht, bis er auf 1 ist.
Problem:
Ich möchte n-JPanels im JFrame erstellen können. Erzeugt werden jene später durch Events. Zum Testen habe ich das mit einem Button realisiert. Leider ist es jetzt so, dass sobald ich den Button klicke, der vorher erstellte JPanel verschwindet. Nehme ich die paint-Methode und den Timer aus der JPanel Klasse heraus, funktioniert es.
Jemand eine Idee?
Java:
public class IncomingCallPanel extends javax.swing.JPanel implements ActionListener {
private BufferedImage image = null;
private Graphics2D g2;
private float f = 0.1f;
private Timer timer;
@Override
public void paint(Graphics g) {
if (this.image == null || this.image.getWidth() != getWidth() || this.image.getHeight() != getHeight()) {
this.image = (BufferedImage) createImage(getWidth(), getHeight());
}
this.g2 = image.createGraphics();
this.g2.setClip(g.getClip());
super.paint(this.g2);
this.g2.dispose();
this.g2 = (Graphics2D) g.create();
this.g2.setComposite(AlphaComposite.SrcOver.derive(0.0f));
this.g2.drawImage(this.image, 0, 0, null);
}
/** Creates new form IncomingCallPanel */
public IncomingCallPanel() {
initComponents();
this.timer = new Timer(50, this);
this.timer.setInitialDelay(100);
this.timer.start();
}
public String getCaller_id() {
return this.caller_id.getText();
}
public String getCaller_nr() {
return this.caller_nr.getText();
}
public void setCaller_id(String id) {
this.caller_id.setText(id);
}
public void setCaller_nr(String nr) {
this.caller_nr.setText(nr);
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
caller_id = new javax.swing.JLabel();
caller_nr = new javax.swing.JLabel();
call_action1 = new javax.swing.JButton();
call_action2 = new javax.swing.JButton();
org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance(asteriskcallmonitor.AsteriskCallMonitorApp.class).getContext().getResourceMap(IncomingCallPanel.class);
setBackground(resourceMap.getColor("Form.background")); // NOI18N
setBorder(new javax.swing.border.LineBorder(new java.awt.Color(0, 0, 0), 1, true));
setName("Form"); // NOI18N
setPreferredSize(new java.awt.Dimension(255, 75));
caller_id.setFont(resourceMap.getFont("caller_id.font")); // NOI18N
caller_id.setText(resourceMap.getString("caller_id.text")); // NOI18N
caller_id.setName("caller_id"); // NOI18N
caller_nr.setText(resourceMap.getString("caller_nr.text")); // NOI18N
caller_nr.setName("caller_nr"); // NOI18N
call_action1.setText(resourceMap.getString("call_action1.text")); // NOI18N
call_action1.setName("call_action1"); // NOI18N
call_action2.setText(resourceMap.getString("call_action2.text")); // NOI18N
call_action2.setName("call_action2"); // NOI18N
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addGap(34, 34, 34)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addGroup(layout.createSequentialGroup()
.addComponent(caller_nr)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 89, Short.MAX_VALUE)
.addComponent(call_action2, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createSequentialGroup()
.addComponent(caller_id)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 42, Short.MAX_VALUE)
.addComponent(call_action1, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(call_action1)
.addComponent(caller_id))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(call_action2)
.addComponent(caller_nr))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
}// </editor-fold>
// Variables declaration - do not modify
private javax.swing.JButton call_action1;
private javax.swing.JButton call_action2;
private javax.swing.JLabel caller_id;
private javax.swing.JLabel caller_nr;
// End of variables declaration
public void actionPerformed(ActionEvent e) {
this.f += 0.1f;
if (this.f >= 1.0f)
this.f = 1.0f;
// draw next alpha step
this.g2.setComposite(AlphaComposite.SrcOver.derive(f));
this.g2.drawImage(this.image, 0, 0, null);
repaint();
// if Alpha >= 1, stop and free timer
if (this.f >= 1.0f) {
this.timer.stop();
this.timer = null;
}
}
}
[/JAvA]
Dank euch :)
Felix