Swing Zähler im Hintergrund falsch berechnet - Warum?

Bexan

Mitglied
Hallo zusammen,

anbei möchte ich euch meinen Testcode zeigen.
Wenn man die Buttons für die Navigation betätigt, dann rechnet er exponentiell aufwärts. Guckt es euch am Besten selber eben an. Ich finde den Fehler gerade nicht -.- Eine Ausgabe des Zählers habe ich eingebaut.

Java:
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.*;
import javax.swing.event.ChangeListener;
import javax.swing.event.ChangeEvent;

public class Testcode { 
    int woSindWir = 0;
    JFrame frame = new JFrame("Verwaltung");
    JPanel thesuper = new JPanel();
    JPanel p1 = new P(85);
    JPanel p2 = new P(15);
    JPanel pa1= new JPanel();
    JPanel pa2 = new JPanel();
    JPanel pa3 = new JPanel();
    JPanel pa4 = new JPanel();
    JPanel pa5 = new JPanel();
    JPanel pa6 = new JPanel();
    JPanel pa7 = new JPanel();
    JTabbedPane tabbedPane = new JTabbedPane();
    JButton jbstart = new JButton("|<");
    JButton jbend = new JButton(">|");
    JButton jbup = new JButton(">");
    JButton jbdown = new JButton("<");
    JTextField navi = new JTextField();

    Font ap = new Font("Arial", Font.BOLD | Font.ITALIC, 36);
    JLabel überschrift = new JLabel("Verwaltung");

    public Testcode() {
        basis();
        verwalten(-10);
    }

    public void basis()
    {
        frame.setBounds(20,20,900,400);

        thesuper.setLayout(new BoxLayout(thesuper, BoxLayout.PAGE_AXIS));
        thesuper.setBackground(new Color(226,0,116));
        frame.add(thesuper);
        überschrift.setForeground(Color.WHITE);
        überschrift.setFont(ap);
        thesuper.add(überschrift);

        p1.setBackground(new Color(226,0,116));
        p1.setLayout(new BoxLayout(p1, BoxLayout.Y_AXIS));

        p2.setBackground(new Color(226,0,116));
        p2.setLayout(null);
        thesuper.add(p1);
        thesuper.add(p2);

        tabbedPane.addTab("pane 1", null, pa1, null);
        tabbedPane.addTab("pane 2", null, pa2,null);
        tabbedPane.addTab("pane 3", null, pa3, null);
        tabbedPane.addTab("pane 4", null, pa4, null);
        tabbedPane.addTab("pane 5", null, pa5, null);
        tabbedPane.addTab("pane 6", null, pa6, null);
        tabbedPane.addTab("Pane 7", null, pa7, null);
        tabbedPane.setBackground(Color.WHITE);
        p1.add(tabbedPane); 
        frame.setVisible(true);
        tabbedPane.addChangeListener(new ChangeListener()
            {
                public void stateChanged(ChangeEvent e){
                    JTabbedPane jtb = (JTabbedPane) e.getSource();
                    System.out.println(jtb.getTitleAt(jtb.getSelectedIndex()));        
                    verwalten(-10);
                }
            });
    }

    public void verwalten(int datensatz)
    {
        jbstart.setBounds(10,10,50,25);
        jbend.setBounds(235,10,50,25);
        jbup.setBounds(180,10,50,25);
        jbdown.setBounds(65,10,50,25);
        navi.setBounds(120,10,55,25);
        navi.setHorizontalAlignment(SwingConstants.CENTER);
        p2.removeAll();
        p2.repaint();
        System.out.println(woSindWir);
        if(datensatz == 0)
        { 
            woSindWir = 10; 
        } 
        else if(datensatz == -10)
        {
            woSindWir = 1;
        } 
        else woSindWir += datensatz;
        navi.setText(String.valueOf(woSindWir));

        p2.add(jbstart);
        jbstart.addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent arg0){
                    verwalten(-10);
                }
            });

        navi.setEditable(true);
        p2.add(navi);

        p2.add(jbend);
        jbend.addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent arg0){
                    verwalten(0);
                }
            });
        //if(woSindWir < 10)
        //{
        p2.add(jbup);
        jbup.addActionListener(new ActionListener() 
            {
                public void actionPerformed(ActionEvent arg0) {
                    verwalten(1);
                }
            });
        //}
        if(woSindWir > 1)
        {
            p2.add(jbdown);
            jbdown.addActionListener(new ActionListener() 
                {
                    public void actionPerformed(ActionEvent arg0) {
                        verwalten(-1);
                    }
                });            
        }
    }

    public static void main(String[] args)
    {
        new Testcode();
    }
}
Die benötigten zweite Klasse...
Java:
import javax.swing.JPanel;
import java.awt.Dimension;
class P extends JPanel {
        private int percent;
        public P(int percent) {
            this.percent = percent;
        }

        @Override
        public Dimension getPreferredSize() {
            Dimension d = getParent().getSize();
            int w = d.width * percent / 100;
            int h = d.height * percent / 100;
            return new Dimension(w,h);
        }
    }
 
S

SlaterB

Gast
bei jedem verwalten() fügst du neue Listener hinzu, wenn schon 8 geadded sind, gibt es 8 Events -> 16 Listener, usw. immer Verdopplung,
adde die Listener nur einmal im Konstruktor oder so, oder entferne immer den alten

auch die restlichen aufwendigen GUI-Arbeiten sind bisher gar nicht vom Parameter abhängig?
wenn du nur einmal Text ändern willst ist panel.removeAll() usw. brutal




@c_sidi90
oh, für mich wars diesmal schon spannend genug, 'rechnet er exponentiell aufwärts' ;)
 
Zuletzt bearbeitet von einem Moderator:

Bexan

Mitglied
Vielen Dank. Da war der Knackpunkt. Die ActionListener füge ich jetzt im Konstruktor einmalig hinzu. Bei den restlichen GUI-Bauten hatte ich jetzt dem Codeschnipsel nicht beigefügt. Mit RemoveAll() wollte ich auch nur kurz zum Testen arbeiten. Hatte ich vergessen wieder zu löschen.

ich weiß jetzt nicht, was du geschrieben hast c_sidi90, aber da es wohl ähnlich war, bedank ich mich bei dir auch :)

hv a nc dy @ all
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
frager2345 Bild aus Dateien lesen und als Hintergrund verwenden AWT, Swing, JavaFX & SWT 2
1 2D-Grafik Flackerndes Hintergrund AWT, Swing, JavaFX & SWT 1
ralfb1105 JavaFX HTTP Download task im Hintergrund innerhalb GUI AWT, Swing, JavaFX & SWT 70
Drachenbauer Swing Wie ändere ich den Hintergrund vom Anzeigefeld einer JComboBox, die nicht zum Hineinschreiben offen steht? AWT, Swing, JavaFX & SWT 32
A Fehler beim Hintergrund AWT, Swing, JavaFX & SWT 17
C Java Hintergrund funktioniert nicht AWT, Swing, JavaFX & SWT 9
A Bilder als Hintergrund AWT, Swing, JavaFX & SWT 2
BobbGott durchsichtiges JTextField mit Hintergrund AWT, Swing, JavaFX & SWT 12
L JPanel zeichnet im Konstrukter erzeugten Hintergrund nicht AWT, Swing, JavaFX & SWT 10
P Jframe Bild einfügen, Hintergrund Farbe ändern, und Button schrift Größe ändern AWT, Swing, JavaFX & SWT 2
T Hintergrund für GUI AWT, Swing, JavaFX & SWT 1
I 2D-Grafik Bilder Eingefügt, button jetzt im Hintergrund AWT, Swing, JavaFX & SWT 2
F JTable Zellen-Hintergrund ändern AWT, Swing, JavaFX & SWT 7
D JButton - Nur Icon anzeigen / transparenter Hintergrund AWT, Swing, JavaFX & SWT 2
H Textfield bleibt im Hintergrund AWT, Swing, JavaFX & SWT 2
E JTable Hintergrund von geklickter Zelle ändern AWT, Swing, JavaFX & SWT 2
wolfgang63 JavaFX Transparenter Hintergrund aber sichtbare Buttons AWT, Swing, JavaFX & SWT 6
F 2D-Grafik Den Hintergrund loopen AWT, Swing, JavaFX & SWT 3
V LookAndFeel JSpinner Hintergrund Farbe mit Nimbus LaF AWT, Swing, JavaFX & SWT 0
O 2D-Grafik Bild abgeschnitten nach Rotation mit Affine Transform und Hintergrund Schwarz AWT, Swing, JavaFX & SWT 8
O Hintergrund von AffineTransfom (rotation) ändern AWT, Swing, JavaFX & SWT 0
D paintComponent() mit transparentem Hintergrund. AWT, Swing, JavaFX & SWT 0
C JFrame paint ohne hintergrund nutzen AWT, Swing, JavaFX & SWT 6
A Swing Paint mit Button Clear den Hintergrund säubern um wieder zeichnen zu können AWT, Swing, JavaFX & SWT 2
S Swing, Button benutzen zum Hintergrund wechseln AWT, Swing, JavaFX & SWT 3
N Swing microba - DatePicker: Feld-Hintergrund anpassen AWT, Swing, JavaFX & SWT 2
M Tastatureingabe im Hintergrund (JTable) AWT, Swing, JavaFX & SWT 2
B Hintergrund laden AWT, Swing, JavaFX & SWT 3
J JButton Hintergrund AWT, Swing, JavaFX & SWT 5
L Gradient Hintergrund malen und durchscheinen lassen AWT, Swing, JavaFX & SWT 8
K Swing JTable Text im Hintergrund einer leeren Tabelle AWT, Swing, JavaFX & SWT 3
L Beim Neuzeichnen einer Swing GUI kurz Schwarzer Hintergrund AWT, Swing, JavaFX & SWT 8
D Swing Probleme bei transparenten Hintergrund im JTextField AWT, Swing, JavaFX & SWT 6
J Swing Malen auf JPanel mit transparentem Hintergrund AWT, Swing, JavaFX & SWT 21
S 2D-Grafik Bild bleibt im Hintergrund bei Diashow AWT, Swing, JavaFX & SWT 3
D Applet hintergrund wird nicht weiß AWT, Swing, JavaFX & SWT 2
B JList transparenter Hintergrund AWT, Swing, JavaFX & SWT 2
J Speichern, Event, Hintergrund getAppletContext AWT, Swing, JavaFX & SWT 2
E Swing JPanel mit Hintergrund AWT, Swing, JavaFX & SWT 3
L Bilder im JPanel als Hintergrund - Swing AWT, Swing, JavaFX & SWT 2
kniffel GUI-Applet JTable füllt Hintergrund völlig aus AWT, Swing, JavaFX & SWT 4
J Hintergrund Label-Frame AWT, Swing, JavaFX & SWT 3
A Hintergrund von einem Frame ändern AWT, Swing, JavaFX & SWT 3
T Hintergrund AWT, Swing, JavaFX & SWT 4
T Hintergrund für 3D Erde AWT, Swing, JavaFX & SWT 4
G 2D-Grafik BufferedImage Hintergrund immer schwarz AWT, Swing, JavaFX & SWT 4
P Swing Zeichnung auf Tab im Hintergrund wird nicht gezeichnet AWT, Swing, JavaFX & SWT 3
J Label mit transparentem hintergrund - geht das? AWT, Swing, JavaFX & SWT 21
B AWT Bild als Hintergrund im Applet AWT, Swing, JavaFX & SWT 2
R Bedeckter Hintergrund AWT, Swing, JavaFX & SWT 17
D Komponenten um weitere Hintergrund- bzw. Vordergrundfarbe erweitern AWT, Swing, JavaFX & SWT 11
M JFrame (Mausrad, Hintergrund) AWT, Swing, JavaFX & SWT 13
Dragonfire Swing Hintergrund aller Komponenten verändern AWT, Swing, JavaFX & SWT 2
DStrohma Swing JPanel mit Bild als Hintergrund AWT, Swing, JavaFX & SWT 2
B Swing Image als Hintergrund im JInternalFrame - Problem AWT, Swing, JavaFX & SWT 3
N GridBagLayout, leere grids (Hintergrund) transparent? AWT, Swing, JavaFX & SWT 3
J Swing JPanel mit Hintergrund zeigt componente nicht AWT, Swing, JavaFX & SWT 6
E einfache Frage:warum ist Hintergrund grau ? AWT, Swing, JavaFX & SWT 24
algorismi JCompnent mit transparentem Hintergrund AWT, Swing, JavaFX & SWT 4
T Schließen eines JDialogs setzen den JFrame in den Hintergrund AWT, Swing, JavaFX & SWT 2
J CellRenderer einzelne zellen Hintergrund AWT, Swing, JavaFX & SWT 9
R JTable Hintergrund der Zeile abhängig von Inhalt einer Zelle verändern AWT, Swing, JavaFX & SWT 3
E Progress Bar mit Bild als Hintergrund AWT, Swing, JavaFX & SWT 2
N Swing Hintergrund Bild in JAR Datei AWT, Swing, JavaFX & SWT 2
N im fenster ein hintergrund bild einfügen AWT, Swing, JavaFX & SWT 18
A Swing Mit Graphics2D auf transparentem Hintergrund zeichnen AWT, Swing, JavaFX & SWT 7
A Hintergrund erstellen AWT, Swing, JavaFX & SWT 13
J Layer von JLayeredPane unsichtbar durchsichtig in den Hintergrund AWT, Swing, JavaFX & SWT 5
T GridLayout Zeilen Hintergrund AWT, Swing, JavaFX & SWT 5
P Swing JComboBox beschädigt hintergrund AWT, Swing, JavaFX & SWT 4
S JButton - Hintergrund verändern AWT, Swing, JavaFX & SWT 7
J Fensterrand überdeckt Hintergrund AWT, Swing, JavaFX & SWT 9
K JTable hintergrund AWT, Swing, JavaFX & SWT 12
SebSnake Animiertes GIF auf JPG Hintergrund darstellen? AWT, Swing, JavaFX & SWT 3
G Label auf Panel auf Panel mit Grafiken als Hintergrund (awt) AWT, Swing, JavaFX & SWT 7
G TextField im Hintergrund AWT, Swing, JavaFX & SWT 2
O Zweifarbiger Hintergrund in einer TableCell? AWT, Swing, JavaFX & SWT 4
R Bilder als Hintergrund für Swing - Komponenten AWT, Swing, JavaFX & SWT 3
R HTML Hintergrund für Swing - Componenten AWT, Swing, JavaFX & SWT 2
0 JTable - Hintergrund Tabellen statt Grau AWT, Swing, JavaFX & SWT 5
V JButton in Hintergrund zwingen? AWT, Swing, JavaFX & SWT 14
G Hintergrund AWT, Swing, JavaFX & SWT 5
M Hintergrund Transparent machen? AWT, Swing, JavaFX & SWT 3
F Farbe für den Hintergrund eine BorderLayout-Teils AWT, Swing, JavaFX & SWT 5
C Fenster rücken beim Drucken in den Hintergrund AWT, Swing, JavaFX & SWT 6
B Programm im Hintergrund - JFrame AWT, Swing, JavaFX & SWT 5
D Robot: Screenshot vom Desktop Hintergrund möglich ? AWT, Swing, JavaFX & SWT 3
F JDialog im Hintergrund lassen AWT, Swing, JavaFX & SWT 2
G schwarzen hintergrund von png transparent machen AWT, Swing, JavaFX & SWT 2
J jlabels überlappen / vorder-hintergrund AWT, Swing, JavaFX & SWT 2
G hintergrund farbe vom flow layout ändern AWT, Swing, JavaFX & SWT 2
S Button im Hintergrund AWT, Swing, JavaFX & SWT 12
foobar JTable im Hintergrund drucken AWT, Swing, JavaFX & SWT 2
B Hintergrund eines JPanels AWT, Swing, JavaFX & SWT 16
M Bild als Hintergrund anzeigen? AWT, Swing, JavaFX & SWT 12
S Hintergrund JTable AWT, Swing, JavaFX & SWT 9
G hintergrund von JFrame/Container transparent machen AWT, Swing, JavaFX & SWT 2
R JMenu + Farbe von Hintergrund AWT, Swing, JavaFX & SWT 2
K icons sauber anzeigen (an hintergrund angepasst) AWT, Swing, JavaFX & SWT 4
RoliMG png datein mit transparentem hintergrund darstellen AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben