Swing JRadioButton zeichnen nicht

Alex2013

Bekanntes Mitglied
Hey Leute,

wenn ich die folgenden Zeilen kompiliere, dann werden mir keine Fehler mehr angezeigt. Aber die verschiedenen paints, die ich ausführen möchte, werden auch nicht ausgeführt. Ich habe es bereits mit einem ItemListener, der implementierten ActionListener Klasse und der inner Type klasse versucht, bei der ich auch eigtl. bleiben möchte. Jedoch lässt sich durch Aktivieren der Radio Buttons nichts zeichnen. Es wird zwar eine Anfangszeichnung vorgenommen, aber wenn die verschiedenen Buttons ausgewählt werden, dann passiert nichts weiter.

Kann mir zufällig jemand sagen, wo der Fehler liegt? Ich habe schon einige Varianten versucht und komme nicht weiter... :-(

Hier der Code:

Java:
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;


public class Funktionsgraph extends JFrame{
   
    private static final long serialVersionUID = 1L;
    JRadioButton funktion1=new JRadioButton("Funktion 1"),funktion2=new JRadioButton("Funktion 2"),funktion3=new JRadioButton("Funktion 3");
    JPanel anhangKnoepfe=new JPanel(),bg=new JPanel();
    Container c;
    Zeichnen zz=new Zeichnen();
    Graphics g;
    ButtonGroup gb;
   
    public Funktionsgraph() {
        c=getContentPane();
        c.setLayout(new BorderLayout());
        setLocationRelativeTo(null);
        setSize(600, 400);
        c.add(zz,BorderLayout.CENTER);
        c.add(anhangKnoepfe,BorderLayout.SOUTH);
        anhangKnoepfe.setLayout(new GridLayout(1, 3));
        bg.add(funktion1);
        bg.add(funktion2);
        bg.add(funktion3);
        anhangKnoepfe.add(funktion1);
        funktion1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
//                zz.setAuswahl(0);
                zz.setAuswahl(isEnabled());
                funktion2.setSelected(false);
                funktion3.setSelected(false);
                repaint();
            }
        });
        anhangKnoepfe.add(funktion2);
        funktion2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                zz.setAuswahl(isEnabled());
                funktion1.setSelected(false);
                funktion3.setSelected(false);
                repaint();
            }
        });
        anhangKnoepfe.add(funktion3);
        funktion3.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                zz.setAuswahl(isEnabled());
                funktion1.setSelected(false);
                funktion2.setSelected(false);
                repaint();
            }
        });
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    public static void main(String[] args) {
        new Funktionsgraph();
    }

}

[/Java]

und hier:

[code=Java]
import java.awt.Graphics;

import javax.swing.JPanel;


public class Zeichnen extends JPanel
{
    private static final long serialVersionUID = 1L;

    boolean auswahl;
    int auswahl1;
    public Zeichnen() {
        auswahl=auswahl;
    }
    public void setAuswahl(boolean b)
    {
        this.auswahl=b;
    }
   
    @Override
    public void paint(Graphics g) {
        super.paint(g);
        g.drawLine(getWidth()-getWidth(), getHeight()/2, getWidth(), getHeight()/2);
        g.drawLine(getWidth()/2, getHeight()-getHeight(), getWidth()/2, getHeight());

        int auswahl = 2;
        switch(auswahl)
        {
        case 0:
            int x=5,y=2*x,x2=-5,y2=-2*x;
            g.drawLine(x, y, x2, y2);
            break;
        case 1:
            int xNeu=5*5,yNeu=2*xNeu,xNeu2=-5*-5,yNeu2=-2*yNeu;
            g.drawLine(xNeu, yNeu, xNeu2, yNeu2);
            break;
        case 2:
            int xNeuNeu=(5*5)*2,yNeuNeu=2*xNeuNeu,xNeuNeu2=-5,yNeuNeu2=-2*xNeuNeu;
            g.drawLine(xNeuNeu, yNeuNeu, xNeuNeu2, yNeuNeu2);
            break;
        }
    }
}

[/Java]

Hat hier jemand eine Idee? :-)

Lg
 

Blender3D

Top Contributor
int auswahl = 2;
switch(auswahl)
{
case 0:
int x=5,y=2*x,x2=-5,y2=-2*x;
g.drawLine(x, y, x2, y2);
break;
case 1:
int xNeu=5*5,yNeu=2*xNeu,xNeu2=-5*-5,yNeu2=-2*yNeu;
g.drawLine(xNeu, yNeu, xNeu2, yNeu2);
break;
case 2:
int xNeuNeu=(5*5)*2,yNeuNeu=2*xNeuNeu,xNeuNeu2=-5,yNeuNeu2=-2*xNeuNeu;
g.drawLine(xNeuNeu, yNeuNeu, xNeuNeu2, yNeuNeu2);
break;
}
Du setz Auswahl konstant auf 2 --> es wird immer nur der Fall 2 sein.
 

Alex2013

Bekanntes Mitglied
Ich habe das jetzt mal an ein paar Stellen angepasst, aber an dem Problem hat sich noch nichts verbessert... :-(
Die Variante mit int auswahl=wert habe ich aus einem anderen fremden Programm. Dort hat es in ähnlicher Weise gearbeitet... Zumindest bei dem switch()case

Hier mal der abgeänderte Code:

Java:
funktion1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
//                zz.setAuswahl(0);
//                zz.setAuswahl(isEnabled());
                funktion1.setSelected(true);
                funktion2.setSelected(false);
                funktion3.setSelected(false);
                repaint();
            }
        });

und

Java:
int auswahl;
//    int auswahl1;
//    boolean b;
    public Zeichnen() {
        auswahl=2;
    }
    public void setAuswahl(int auswahl)
    {
        this.auswahl=auswahl;
    }
  
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawLine(getWidth()-getWidth(), getHeight()/2, getWidth(), getHeight()/2);
        g.drawLine(getWidth()/2, getHeight()-getHeight(), getWidth()/2, getHeight());
//        int auswahl = 0;
        switch(auswahl)
        {
        case 0:
            int x=5,y=2*x,x2=-5,y2=-2*x;
            g.drawLine(x, y, x2, y2);
            break;

wie lässt sich dieser Fehler denn beheben?
 
Zuletzt bearbeitet von einem Moderator:

Blender3D

Top Contributor
Also der erste Code funktioniert nicht weil die Variable auswahl lokal konstant gesetzt wird.
Um das Problem zu lösen musst Du eine Klassen Variabel auswahl definieren. Die mittels der Actionlistener Deiner Buttons gesetzt wird. Der nachfolgende Code demonstriert das. Ausserdem solltest Du nur Klassenvariablen definieren, die du auch als solche verwendest.
JPanel anhangKnoepfe=new JPanel(),bg=new JPanel();
Container c;
z.B. Sollten die lokal defeniert werden.
Ich habe Deinen Code etwas verbessert. Unter Anderem hast Du 3x den selben ActionListener geschrieben.
Schau Dir den Code an und probiere diesen aus. Für Fragen dazu: einfach stellen.

Java:
import java.awt.Graphics;
import javax.swing.JPanel;

public class Zeichnen extends JPanel {
    private static final long serialVersionUID = 1L;
    int auswahl = 2;

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawLine(getWidth() - getWidth(), getHeight() / 2, getWidth(), getHeight() / 2);
        g.drawLine(getWidth() / 2, getHeight() - getHeight(), getWidth() / 2, getHeight());

        switch (auswahl) {
        case 0:
            int x = 5, y = 2 * x, x2 = -5, y2 = -2 * x;
            g.drawLine(x, y, x2, y2);
            break;
        case 1:
            int xNeu = 5 * 5, yNeu = 2 * xNeu, xNeu2 = -5 * -5, yNeu2 = -2 * yNeu;
            g.drawLine(xNeu, yNeu, xNeu2, yNeu2);
            break;
        case 2:
            int xNeuNeu = (5 * 5) * 2, yNeuNeu = 2 * xNeuNeu, xNeuNeu2 = -5, yNeuNeu2 = -2 * xNeuNeu;
            g.drawLine(xNeuNeu, yNeuNeu, xNeuNeu2, yNeuNeu2);
            break;
        }
    }

    public void setAuswahl(int burronNumwer) {
        if (burronNumwer < 0 || burronNumwer >= Funktionsgraph.NUM_BUTTONS)
            return;
        this.auswahl = burronNumwer;
    }
}

Java:
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;

public class Funktionsgraph extends JFrame implements ActionListener {
    private static final long serialVersionUID = 1L;
    public static final int NUM_BUTTONS = 3;
    public static final int BUTTON_1 = 0;
    public static final int BUTTON_2 = 1;
    public static final int BUTTON_3 = 2;
    JRadioButton[] funktion = new JRadioButton[NUM_BUTTONS];
    Zeichnen zeichnen = new Zeichnen();

    public Funktionsgraph() {
        JPanel anhangKnoepfe = new JPanel(), bg = new JPanel();
        for (int i = 0; i < NUM_BUTTONS; i++) {
            funktion[i] = new JRadioButton("Funktion " + i);
            bg.add(funktion[i]);
            funktion[i].addActionListener(this);
            anhangKnoepfe.add(funktion[i]);
        }
        Container c = getContentPane();
        c.setLayout(new BorderLayout());
        setLocationRelativeTo(null);
        setSize(600, 400);
        c.add(zeichnen, BorderLayout.CENTER);
        c.add(anhangKnoepfe, BorderLayout.SOUTH);
        anhangKnoepfe.setLayout(new GridLayout(1, 3));

        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        Object src = e.getSource();
        for (JRadioButton b : funktion)
            b.setSelected(false);
        if (src == funktion[BUTTON_1])
            activateButton(funktion[BUTTON_1], BUTTON_1);
        if (src == funktion[BUTTON_2])
            activateButton(funktion[BUTTON_2], BUTTON_2);
        if (src == funktion[BUTTON_3])
            activateButton(funktion[BUTTON_3], BUTTON_3);
        repaint();
    }

    private void activateButton(JRadioButton button, int auswahl) {
        button.setSelected(true);
        zeichnen.setAuswahl(auswahl);
    }

    public static void main(String[] args) {
        new Funktionsgraph();
    }

}

;) Stell Fragen.
 
Zuletzt bearbeitet von einem Moderator:
Ähnliche Java Themen
  Titel Forum Antworten Datum
A 2D-Grafik Zeichen werden über unabhängingen JRadioButton nicht gefüllt AWT, Swing, JavaFX & SWT 28
M Aktion ausführen wenn ein JRadiobutton deselektiert wird. AWT, Swing, JavaFX & SWT 3
P Wie lese ich einen jRadioButton aus? AWT, Swing, JavaFX & SWT 21
S JRadioButton und JCheckBox im JTree AWT, Swing, JavaFX & SWT 14
W Bei Programmstart jRadioButton automatisch auswählen AWT, Swing, JavaFX & SWT 2
W JRadioButton sauber untereinander anordnen AWT, Swing, JavaFX & SWT 3
G JRadioButton aktualisieren nicht... AWT, Swing, JavaFX & SWT 10
P JRadioButton.isSelected() Problem AWT, Swing, JavaFX & SWT 10
M Makierung bei JRadioButton entfernen AWT, Swing, JavaFX & SWT 5
H Swing Auf Änderung bei JRadioButton reagieren. AWT, Swing, JavaFX & SWT 3
Y JRadioButton soll JTextBox aktivieren UND deaktivieren AWT, Swing, JavaFX & SWT 3
Zettelkasten Swing JRadioButton festlegen AWT, Swing, JavaFX & SWT 2
M jradiobutton in jtable AWT, Swing, JavaFX & SWT 4
M JRadioButton refresh AWT, Swing, JavaFX & SWT 5
E JRadiobutton AWT, Swing, JavaFX & SWT 11
Guybrush Threepwood JRadioButton transparent AWT, Swing, JavaFX & SWT 2
J LayoutManager Layout über JRadiobutton Wechseln AWT, Swing, JavaFX & SWT 6
S Frage zu JRadioButton AWT, Swing, JavaFX & SWT 2
H JRadioButton.requestFocus() - Problem AWT, Swing, JavaFX & SWT 2
G JRadioButton-Platzierung AWT, Swing, JavaFX & SWT 4
W JRadioButton / JCheckBox problem AWT, Swing, JavaFX & SWT 6
F Problem mit JRadioButton AWT, Swing, JavaFX & SWT 4
S JradioButton oder Toggle AWT, Swing, JavaFX & SWT 2
M JradioButton und ItemListener AWT, Swing, JavaFX & SWT 4
D JRadioButton Object AWT, Swing, JavaFX & SWT 2
P JRadioButton in Schleife erstellen > wo liegt mein Fehler AWT, Swing, JavaFX & SWT 2
I JRadioButton disablen geht nicht AWT, Swing, JavaFX & SWT 4
K JLabel / JRadioButton in Tabelle anzeigen AWT, Swing, JavaFX & SWT 7
T JRadioButton abfragen AWT, Swing, JavaFX & SWT 1
G JRadioButton in eine Tabelle AWT, Swing, JavaFX & SWT 4
F JRadioButton dynamisch benennen? AWT, Swing, JavaFX & SWT 7
B JRadioButton nicht auswählbar AWT, Swing, JavaFX & SWT 2
G JRadioButton beim deselektieren Wert ändern. AWT, Swing, JavaFX & SWT 2
M JRadioButton auslesen? AWT, Swing, JavaFX & SWT 8
G JRadioButton dynamisch erzeugen AWT, Swing, JavaFX & SWT 6
J LineBorder bei JRadioButton AWT, Swing, JavaFX & SWT 3
G JRadioButton deaktivieren? AWT, Swing, JavaFX & SWT 6
R jRadioButton AWT, Swing, JavaFX & SWT 4
M Mandelbrot mit BigDecimal erstellen und in der UI zeichnen, funktionierte nicht. AWT, Swing, JavaFX & SWT 1
H JavaFX Canvas neu zeichnen anstoßen AWT, Swing, JavaFX & SWT 34
H Transparent zeichnen mit drawImage in paintComponent Methode AWT, Swing, JavaFX & SWT 3
N JavaFX Unicode zeichnen in javafx Label verwenden AWT, Swing, JavaFX & SWT 2
G 2D-Grafik Grafik in zwei verschiedenen Fenstern gleichzeitig zeichnen AWT, Swing, JavaFX & SWT 9
S Event Handling Neu zeichnen nur wenn Berechnung fertig ist AWT, Swing, JavaFX & SWT 4
W JavaFX Ich kann keinen Kreis richtig zeichnen AWT, Swing, JavaFX & SWT 8
CptK Funktionsgraphen effizient zeichnen und nur Teile von JPanel erneuern AWT, Swing, JavaFX & SWT 2
G Dreieck aus Pixeln zeichnen AWT, Swing, JavaFX & SWT 8
N Mit KeyListener ein rechteck zeichnen AWT, Swing, JavaFX & SWT 9
B 2D-Grafik paintcomponent Probleme beim zeichnen AWT, Swing, JavaFX & SWT 10
Z Swing Graph zeichnen lassen AWT, Swing, JavaFX & SWT 16
O Kann kei neues Panel zum zeichnen aufrufen... AWT, Swing, JavaFX & SWT 4
L Swing zeichnen AWT, Swing, JavaFX & SWT 14
S GUI Kreuz zeichnen und Position ausgeben AWT, Swing, JavaFX & SWT 3
S GUI Kreis zeichnen AWT, Swing, JavaFX & SWT 13
S Swing Rechteck über JTable zeichnen (per MouseListener) AWT, Swing, JavaFX & SWT 1
L Swing Ein Rechteck in ein Grid Zeichnen AWT, Swing, JavaFX & SWT 5
L JavaFX Animation, erst zeichnen dann anzeigen AWT, Swing, JavaFX & SWT 4
K Mehrere Linien zeichnen AWT, Swing, JavaFX & SWT 8
E Transparent zeichnen AWT, Swing, JavaFX & SWT 2
S AWT Probleme beim Zeichnen AWT, Swing, JavaFX & SWT 3
T Tic Tac Toe - GUI Linien zeichnen AWT, Swing, JavaFX & SWT 14
C Applet Zeichnen über Button-Click AWT, Swing, JavaFX & SWT 13
Soloeco Graph zeichnen AWT, Swing, JavaFX & SWT 1
G Zeichnen Programm AWT, Swing, JavaFX & SWT 1
I Graph mit Swing zeichnen AWT, Swing, JavaFX & SWT 8
H Swing + Paint: Mehrere Objekte zeichnen lassen AWT, Swing, JavaFX & SWT 3
W Swing JPanel nur einmal nach mehreren Änderungen neu zeichnen AWT, Swing, JavaFX & SWT 1
D Quadrat, Rechteck zeichnen AWT, Swing, JavaFX & SWT 3
K Probleme beim zeichnen mit paintComponent() AWT, Swing, JavaFX & SWT 1
JG12111989 mehrere Polyline-Objekte zeichnen AWT, Swing, JavaFX & SWT 3
J Swing Vertikales Zeichnen eines Strings mit Java2D AWT, Swing, JavaFX & SWT 1
7 JavaFX Problem beim Zeichnen eines Dreiecks in einem GUI AWT, Swing, JavaFX & SWT 6
P 2D-Grafik Bogen(Arc) zwischen zwei Punkten zeichnen AWT, Swing, JavaFX & SWT 2
F Java Swing Rechteck in JPanel zeichnen AWT, Swing, JavaFX & SWT 7
KilledByCheese Swing 2D JLabel Array Maze zeichnen AWT, Swing, JavaFX & SWT 2
S Parallele Linien zeichnen AWT, Swing, JavaFX & SWT 5
J Linien auf JPanel zeichnen AWT, Swing, JavaFX & SWT 3
P AWT Canvas freihändig zeichnen AWT, Swing, JavaFX & SWT 1
llabusch Linien in JPanel zeichnen AWT, Swing, JavaFX & SWT 6
S passende PaintComponent ? Zeichnen in TextArea mit Scrollpane ? AWT, Swing, JavaFX & SWT 2
I Applet BlueJ Applet - Bild mit if-Schleife zeichnen lassen AWT, Swing, JavaFX & SWT 16
L JavaFX JavafX Timelime zeichnen und schön stylen? AWT, Swing, JavaFX & SWT 2
I JFrame neu zeichnen, nicht überzeichnen! AWT, Swing, JavaFX & SWT 2
I Spielsteine zeichnen und entfernen AWT, Swing, JavaFX & SWT 3
H JavaFX Freezes beim Zeichnen mit Canvas AWT, Swing, JavaFX & SWT 3
H Swing BufferedImage zeichnen AWT, Swing, JavaFX & SWT 1
M JFreeChart neu zeichnen sich Wenn Jtable sich ändert AWT, Swing, JavaFX & SWT 5
S 2D-Grafik MouseDragged Linien zeichnen AWT, Swing, JavaFX & SWT 4
M Zeichnen ohne vorherige Linien zu löschen AWT, Swing, JavaFX & SWT 2
T Problem beim Zeichnen von Rechteck AWT, Swing, JavaFX & SWT 3
T Swing / Kreis zeichnen AWT, Swing, JavaFX & SWT 2
I Text zur Linie zeichnen AWT, Swing, JavaFX & SWT 1
I Pfeil zeichnen am Ende einer Linie AWT, Swing, JavaFX & SWT 1
D 2D-Grafik Inhalt eines Graphics in anderes Graphics zeichnen.... AWT, Swing, JavaFX & SWT 3
F Zeichnen des Button AWT, Swing, JavaFX & SWT 4
B Zeichnen mit paintComponent? Oder anders? AWT, Swing, JavaFX & SWT 15
C Swing Aus verschiedenen Klassen zeichnen. AWT, Swing, JavaFX & SWT 2
C Swing BufferedImage zeichnen und JLabels setzen. AWT, Swing, JavaFX & SWT 17
M Kein Zeichnen der Figuren auf JPanel AWT, Swing, JavaFX & SWT 4
J JButton neu zeichnen lassen AWT, Swing, JavaFX & SWT 9

Ähnliche Java Themen

Neue Themen


Oben