Klappt nicht: Ein Panel neu zeichnen

Hallo Forum,
folgenden Text fand ich in einer Dokumentation. Ich habe eine Buttonfunktion hinzugefügt. Das Panel soll gelöscht werden.
Wird aber nichts. Einen Error bekomme ich aber auch nicht. Warum läuft das nicht ?

Onkel Tom

Java:
import javax.swing.*;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class NotHelloWorld
{

    public static void main(String[] args)
    {
        NotHelloWorldFrame frame = new NotHelloWorldFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.show();
    }

}
/** Ein Rahmen, der eine Grundfläche (Panel) für die Meldung enthält */
class NotHelloWorldFrame extends JFrame implements ActionListener
{ 
    //Beginn meine Ergänzung
    public JButton konvert=new JButton("TEST");
    NotHelloWorldPanel pan = new NotHelloWorldPanel();
    @Override
    public void actionPerformed(ActionEvent e)
    {
          String strComm = e.getActionCommand();
               if (strComm.equals("TEST"))
                  {
                      JOptionPane.showMessageDialog(null,strComm + "TESTMELDUNG 1 ");
                      pan.setBackground(Color.red);
                      pan.repaint();
                  }
          pan.Test2();     
    }
    //Ende
    
    public NotHelloWorldFrame()
    {
        konvert.addActionListener(this);
        
        //Bildschirmabmessungen holen
        Toolkit kit = Toolkit.getDefaultToolkit();
        Dimension screenSize = kit.getScreenSize();
        int screenHeight=screenSize.height;
        int screenWidth = screenSize.width;
        
        //Rahmen auf bildschirm zentrieren
        setSize(screenWidth / 2, screenHeight / 2);
        setLocation(screenWidth / 4, screenHeight / 4);
        
        
        setTitle("NotHelloWorld");
        setSize(WIDTH, HEIGHT);
        
        //Grundfläche zu Rahmen hinzufügen
        NotHelloWorldPanel panel = new NotHelloWorldPanel();
        Container contentPane = getContentPane();
        panel.add(konvert);
        contentPane.add(panel);
    }
    public static final int WIDTH = 400;
    public static final int HEIGHT = 200;
}

/** Eine grundfläche die eine Meldung anzeigt */

class NotHelloWorldPanel extends JPanel
{
    public void Test2()                              //meine Ergänzung, Panel soll gelöscht werden
    {
        setBackground(Color.red);
        repaint();
        String strComm="";
        JOptionPane.showMessageDialog(null,strComm + "TESTMELDUNG 2 ");
    }
    
    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);                         
        g.drawString("A B C D E ", MESSAGE_X, MESSAGE_Y);
        
    }
    public static final int MESSAGE_X= 75;
    public static final int MESSAGE_Y=100;
}
:(
 
Oh, ich glaube, ich habe dein Problem falsch verstanden. Mit "Das Panel soll gelöscht werden." meinst du wohl nicht, dass du das Panel entfernen möchtest, sondern, dass die Background-Farbe rot werden soll?
In diesem Fall ist dein Problem, dass du zwei Instanzen vom NotHelloWorldPanel erzeugst. Einmal als Instanzvariable innerhalb von NotHelloWorldFrame und einmal als lokale Variable innerhalb des Konstruktors von NotHelloWorldFrame. Allerdings setzt du aber nur die im Konstruktor angelegte Instanz auch in das JFrame, versuchst aber, die Hintergrundfarbe auf der Instanz in der Instanzvariablen zu setzen.
 
Das Panel soll gelöscht werden.
Ich vermute einmal, dass Du mittels Button den Panel entfernen willst.
Java:
import java.awt.Dimension;
import java.awt.Toolkit;
import javax.swing.JFrame;

public class start {
    public static void main(String[] args) {
        Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
        int width = dim.width / 2;
        int height = dim.height / 2;
        JFrame frame = new NotHelloWorldFrame(width, height);
        frame.setLocation((dim.width - width) / 2, (dim.height - height) / 2);
    }
}
Java:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JPanel;

@SuppressWarnings("serial")
public class NotHelloWorldPanel extends JPanel {

    public NotHelloWorldPanel(int width, int height) {
        setPreferredSize(new Dimension(width, height));
        setBackground(Color.DARK_GRAY);
        setForeground(Color.WHITE);
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawString("A B C D E ", 75, 100);
    }
}
Java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

@SuppressWarnings("serial")
public class NotHelloWorldFrame extends JFrame implements ActionListener {
    private final static int DELETE = 0;
    private final static int INSERT = 1;
    private String[] buttonTxt = { "delete", "insert" };

    private JPanel panel = null;
    private JButton button = new JButton(buttonTxt[DELETE]);

    public NotHelloWorldFrame(int width, int height) {
        setPreferredSize(new Dimension(width, height));
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        panel = new NotHelloWorldPanel(width, height - 30);
        setBackground(Color.LIGHT_GRAY);
        add(button, BorderLayout.NORTH);
        add(panel, BorderLayout.CENTER);
        pack();
        setVisible(true);
        button.addActionListener(this);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        String cmd = e.getActionCommand();
        if (cmd.equals(buttonTxt[DELETE])) {
            remove(panel);
            button.setText(buttonTxt[INSERT]);
        }
        if (cmd.equals(buttonTxt[INSERT])) {
            add(panel);
            button.setText(buttonTxt[DELETE]);
        }
        repaint();
    }
}
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben