Applet JApplet Problem

SirBaros

Bekanntes Mitglied
Hallo ich möchte gerne ein Bild und ein Button in einem Applet anzeigen lassen.
In Eclipse funktioniert das Applet mit dem Code super. Nur wenn ich es in eine Html einbinde und mit dem Browser starte erscheint nur das Bild und nicht der Button.

Woran liegt das?

Java:
public class TestFrame extends JApplet {

	private Image img;

	public void init() {
		setSize(900, 670);
		Container ct = getContentPane();
		ct.setLayout(null);// Null-Layout
		ct.setBackground(Color.WHITE);

		JButton bt = new JButton("Button");
		bt.setBounds(10, 400, 50, 50);

		img = getImage(getDocumentBase(), "picture.jpg");

		ct.add(bt);

	}

	public void paint(Graphics g) {

		g.drawImage(img, 0, 0, this);

		g.setColor(new Color(3, 4, 97));
		g.drawLine(0, 122, 900, 122);

	}

}

Hier Html Code
Java:
<html>
  <title> TestApp</title>
  <body bgcolor=#cccccc>
    <font face="verdana" size="2">  
    <br>
    TestAnwendung
	<br>
	</font>
	<P ALIGN=center>
	<Applet code="TestFrame.class" Height="670" Width="900"></P>


	</Applet>

</body>	

</html>
 

xehpuk

Top Contributor
Probiers mal mit nem
Code:
validate();
hinter
Code:
ct.add(bt);
. Wenn das nicht reicht, noch ein
Code:
repaint();
dranhängen.
 

L-ectron-X

Gesperrter Benutzer
Das liegt daran, weil du die paint()-Methode überschreibst.
Mach das alles in einem JPanel, überschreibe dort zum Zeichnen die paintComponent()-Methode und setze das JPanel dann ins JApplet.
 

SirBaros

Bekanntes Mitglied
Danke L-extron-X. Ist das so richtig? Es funktioniert so immer noch nicht.
Java:
import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.MediaTracker;

import javax.swing.ImageIcon;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

public class TestFrame extends JApplet {

	private Image img;
	private Graphics g;

	public void init() {
		setSize(900, 670);
		Container ct = getContentPane();
		ct.setLayout(null);// Null-Layout
		ct.setBackground(Color.WHITE);

		JButton bt = new JButton("Button");
		bt.setBounds(10, 400, 50, 50);

		img = getImage(getDocumentBase(), "picture.jpg");

		JPanel p = new JPanel();
		p.setLayout(null);
		g = p.getGraphics();
		

		ct.add(p);
		p.add(bt);
	}

	public void paint(Graphics g) {

		g.drawImage(img, 0, 0, this);

		g.setColor(new Color(3, 4, 97));
		g.drawLine(0, 122, 900, 122);

	}

}
 

Quaxli

Top Contributor
L-ectron-X hatte Dir empfohlen die paintComponent-Methode zu überschreiben. Du überschreibst immer noch die paint-Methode.
 

SirBaros

Bekanntes Mitglied
Ok habs mit PaintComponent versucht, geht immer noch net. Hab den Code genommen von meinem vorletzten Post und habe diese Methode überwschrieben. Funktionert net.

Java:
   public void paintComponent(Graphics g) {
 
        g.drawImage(img, 0, 0, this);
 
        g.setColor(new Color(3, 4, 97));
        g.drawLine(0, 122, 900, 122);
 
    }
 
}
 

xehpuk

Top Contributor
Überschreibst du da wirklich etwas? Setz mal ein
Code:
@Override
vor die Methode, um sicherzugehen.
Du solltest die
Code:
paintComponent(Graphics)
vom JPanel überschreiben. Dort dann als erstes Statement das
Code:
super.paintComponent(Graphics)
nicht vergessen! Außerdem solltest du mal nen LayoutManager nehmen. So, wie es momentan ist, dürfte das JPanel gar nicht erst bei dir angezeigt werden.
 

SirBaros

Bekanntes Mitglied
Mhh ich krieg des nicht hin. Kannst mir bitte mal mein Code abändern. Komm nicht vorran. Er bringt mir fehler wenn ich @override dazumache... danke
 

Michael...

Top Contributor
JApplet besitzt keine Methode paintComponent(Graphics) die man überschreiben könnte.
Versuchs doch mal mit dem Hinweis von L-extron-X:
Verwende ein JPanel füge darin den JButton ein und überschreibe dessen paintComponent(Graphics). Diese JPanel fügst Du dann ins JApplet ein.
L-extron-X hat gesagt.:
Mach das alles in einem JPanel, überschreibe dort zum Zeichnen die paintComponent()-Methode und setze das JPanel dann ins JApplet.
Grundsätzlich sollte man keine paint(Graphics) einer Swing Kompontene überschreiben, wenn man nicht genau weiss, was man da macht.
 

xehpuk

Top Contributor
Kein Wunder, dass es einen Fehler gibt. Schließlich hat JApplet/JFrame keine
Code:
paintComponent(Graphics)
. So wars gemeint:
Java:
ct.add(new JPanel() {
	@Override
	public void paintComponent(Graphics g) {
		super.paintComponent(g);
		g.drawImage(img, 0, 0, this);
		g.setColor(new Color(3, 4, 97));
		g.drawLine(0, 122, 900, 122);
	}
});
Falls dir das Ganze etwas merkwürdig vorkommt, dann mach dich mal über anonyme Klassen schlau.
 

L-ectron-X

Gesperrter Benutzer
Hier mal einer von mehrere möglichen Lösungsansätzen:

Java:
//Zeichnen auf einen Container (JPanel), welcher dem JApplet als Hintergrund hinzugefügt wird:
import javax.swing.*;
import javax.imageio.*;
import java.awt.*;
import java.net.*;
import java.io.*;


public class PictureApplet extends JApplet {
   private Image image;

   public void init() {
      setContentPane(new MyContentPane());

      try {
         image = ImageIO.read(new URL(getCodeBase(), "Bild.jpg"));
      }
      catch(IllegalArgumentException iae) {
         JOptionPane.showMessageDialog(this, "Grafikdatei nicht gefunden!");
      }
      catch(IOException ioe) {
         JOptionPane.showMessageDialog(this, "Fehler beim Einlesen der Grafikdatei!");
      }

   }

   private class MyContentPane extends JPanel {
      private MyContentPane() {
        setLayout(new GridBagLayout());
        JButton b = new JButton("Klicken!");
        add(b);
      }

      public void paintComponent(Graphics g) {
         super.paintComponent(g);
         if(image != null) {
            g.drawImage(image, 0, 0, this);
         }
      }
   }
}
 

SirBaros

Bekanntes Mitglied
Hi L-extron-X Danke nochmal. Meine letzte Frage wie kann ich dann wenn ich den Button klicke ein neues leeres JPanel im Applet anzeigen lassen? Hab eine extra interne klasse erzeugt TestPane (dein Code erweitert) und teile der Klasse dem setContentPane zu. Eine Idee?

Java:
private class MyContentPane extends JPanel implements ActionListener {
		private MyContentPane() {
			setLayout(new GridBagLayout());
			JButton b = new JButton("Klicken!");
			b.addActionListener(this);

			add(b);
		}

		public void actionPerformed(ActionEvent ev) {
			setContentPane(new TestPane());
			

		}

		public void paintComponent(Graphics g) {
			super.paintComponent(g);
			if (image != null) {
				g.drawImage(image, 0, 0, this);
			}
		}

               private class TestPane extends JPanel{
		private TestPane() {
			
			setLayout(new BorderLayout());
			JButton bt = new JButton("GEIL");

			add(bt,BorderLayout.SOUTH);
		}
	}
 

Michael...

Top Contributor
Weder JPanel noch die Klasse MyContentPane besitzt eine Methode setContentPane(...)

Ansonsten muss bei GUI Änderungen zur Laufzeit mindestens ein validate() auf dem Container aufgerufen werden.
 
Zuletzt bearbeitet:

Michael...

Top Contributor
@Blakh: Ziemlich wahrscheinlich ist das so. Wird aber aus dem Kontext nicht deutlich und ist auch nicht gerade objektorientiert.

@SirBaros: Muss es unbedingt immer ein neues JPanel sein? Warum? Denn sonst könnte man z.B. mittels CardLayout zur Laufzeit die angezeigten Komponenten "austauschen"
 

SirBaros

Bekanntes Mitglied
CardLayout? mhhh ja ich muss aufjedenfall die Komponenten austauschen. Mit CardLAyout kenn ich mich net aus. Wenn es geht wieso nicht.
 

SirBaros

Bekanntes Mitglied
Und wie kann ich bei dem Code von L-extron-X z.b. durch den Button klick ein neues JPanel öffnen und das alte löschen bzw verschwinden lassen? Hab ne neue Interne Klasse erzeugt.
 

L-ectron-X

Gesperrter Benutzer
Das Ganze noch mal mit einem Teil von deinem Code, etwas objektorientierter und mit CardLayout umgebaut. Das könnte so aussehen:

Das Applet:
Java:
import javax.swing.*;
import javax.imageio.*;
import java.awt.*;
import java.net.*;
import java.io.*;
import java.awt.event.*;


public class PictureApplet extends JApplet implements ActionListener {
   private Image image;
   private TestPanel tp;
   private MyContentPane cp;
   private JPanel cards;

   public void init() {
      setLayout(new BorderLayout());
      try {
         image = ImageIO.read(new URL(getCodeBase(), "Bild.jpg"));
      }
      catch(IllegalArgumentException iae) {
         JOptionPane.showMessageDialog(this, "Grafikdatei nicht gefunden!");
      }
      catch(IOException ioe) {
         JOptionPane.showMessageDialog(this, "Fehler beim Einlesen der Grafikdatei!");
      }
      
      cards = new JPanel(new CardLayout());

      cp = new MyContentPane(this, image);
      cards.add(cp, "MyContentPane");
      
      tp = new TestPanel(this);
      cards.add(tp, "TestPanel");
      
      add(cards, BorderLayout.CENTER);
   }
   
   public void actionPerformed(ActionEvent e) {
      JButton source = (JButton)e.getSource();
      if(source.getText().equals("GEIL")) {
         showMyContentPane();
      }
      else if(source.getText().equals("Klicken!")) {
         showTestPanel();
      }
   }
   
   public void showTestPanel() {
      CardLayout cl = (CardLayout)(cards.getLayout());
      cl.show(cards, "TestPanel");
   }
   
   public void showMyContentPane() {
      CardLayout cl = (CardLayout)(cards.getLayout());
      cl.show(cards, "MyContentPane");
   }

}

Das MyContentPane:
Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class MyContentPane extends JPanel {
    private Image image;
    
    public MyContentPane(PictureApplet pa, Image image) {
        this.image = image;
        setLayout(new GridBagLayout());
        JButton b = new JButton("Klicken!");
        b.addActionListener(pa);

        add(b);
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        if (image != null) {
            g.drawImage(image, 0, 0, this);
        }
    }


}

und das TestPanel:
Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class TestPanel extends JPanel {

    public TestPanel(PictureApplet pa) {
        setLayout(new BorderLayout());
        JButton bt = new JButton("GEIL");
        bt.addActionListener(pa);

        add(bt, BorderLayout.SOUTH);
    }

}

Wenn ich jetzt keine Fehler eingebaut habe, sollte das so funktionieren.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
Semox Swing JApplet: Problem MouseListener Anmeldung AWT, Swing, JavaFX & SWT 3
J JApplet und Zeichnen AWT, Swing, JavaFX & SWT 8
J JApplet, HTML und access denied exitVM.0 AWT, Swing, JavaFX & SWT 3
B JApplet AWT, Swing, JavaFX & SWT 2
P JApplet verhält sich im Browser anders als im Eclipse (AppletViewer) AWT, Swing, JavaFX & SWT 3
P JApplet Browser Tab Öffnen AWT, Swing, JavaFX & SWT 5
H Swing JApplet - HTML - ClassNotFoundException AWT, Swing, JavaFX & SWT 7
M Frage zu KeyListener bzgl. JApplet AWT, Swing, JavaFX & SWT 3
B JApplet zwei Panels autobreite? AWT, Swing, JavaFX & SWT 2
F Applet JApplet per html einbinden - Main class kann nicht gefunden werden AWT, Swing, JavaFX & SWT 15
B Swing JTabbedPane in JApplet -> Reiter bei Aktualisation mehrmals zu sehen AWT, Swing, JavaFX & SWT 3
M JApplet mit Java 3D Komponente AWT, Swing, JavaFX & SWT 6
J JApplet langsam wegen vielen Tooltips? AWT, Swing, JavaFX & SWT 36
R JApplet, Elemente unsichtbar AWT, Swing, JavaFX & SWT 2
B Swing Komponenten auf JApplet setSize AWT, Swing, JavaFX & SWT 7
B Swing Komponenten auf JApplet setSize AWT, Swing, JavaFX & SWT 2
V Applet JApplet Flackern durch Repaint AWT, Swing, JavaFX & SWT 11
K JApplet Probleme AWT, Swing, JavaFX & SWT 5
S [JAVA] JFrame in Applet/JApplet AWT, Swing, JavaFX & SWT 14
H JApplet will sich nicht refreshen AWT, Swing, JavaFX & SWT 10
F OpenMap und Swing in JApplet AWT, Swing, JavaFX & SWT 8
C Applet JApplet - Verständnissproblem AWT, Swing, JavaFX & SWT 3
H Applet JApplet soll neues Tab im Browser öffnen AWT, Swing, JavaFX & SWT 2
G Unterschiedliche Pfadangabe zu Icons zwischen JApplet und JWindow? AWT, Swing, JavaFX & SWT 2
J Swing JApplet Designfrage AWT, Swing, JavaFX & SWT 4
J JApplet schneidet Menüleiste ab AWT, Swing, JavaFX & SWT 4
D JApplet hängt im Browser fest AWT, Swing, JavaFX & SWT 5
M JFrame in JApplet einbinden AWT, Swing, JavaFX & SWT 13
E Bild auf JApplet AWT, Swing, JavaFX & SWT 5
Semox Swing Random Checkbox JApplet AWT, Swing, JavaFX & SWT 14
A Focus für JApplet AWT, Swing, JavaFX & SWT 7
U JPanel wechsel in JApplet AWT, Swing, JavaFX & SWT 14
J AWT JApplet lädt Bild nicht hoch AWT, Swing, JavaFX & SWT 7
R JApplet - Infos ueber Browser moeglich? AWT, Swing, JavaFX & SWT 5
V Kein Fokus für Key Bindings auf JPanel bzw JApplet AWT, Swing, JavaFX & SWT 2
S StackOverflowError bei MouseWheelListener für JApplet AWT, Swing, JavaFX & SWT 5
G JFrame in JApplet AWT, Swing, JavaFX & SWT 6
M Daten speichern mit JApplet AWT, Swing, JavaFX & SWT 9
lukas24680 JApplet und getContentPane() AWT, Swing, JavaFX & SWT 8
G paintComponent JPanel im JApplet AWT, Swing, JavaFX & SWT 2
S Alternative zu paint in JApplet AWT, Swing, JavaFX & SWT 3
R Im JFrame ein JApplet zum öffnen einer Url benutzen AWT, Swing, JavaFX & SWT 22
H JApplet fehler objekte unsichtbar. AWT, Swing, JavaFX & SWT 2
C Swing-JApplet AWT, Swing, JavaFX & SWT 3
B JDialog in JApplet AWT, Swing, JavaFX & SWT 3
P Image in JApplet geht nicht AWT, Swing, JavaFX & SWT 2
G Problem mit der Anzeige von jLabel. Unlesbar wenn der Text geändert wird. AWT, Swing, JavaFX & SWT 28
H 2D-Grafik Problem mit Paint AWT, Swing, JavaFX & SWT 1
S Layout - Problem AWT, Swing, JavaFX & SWT 1
Tassos JavaFX/Problem mit der Maussteuerung in Stackpane AWT, Swing, JavaFX & SWT 7
sserio Java Fx - Problem AWT, Swing, JavaFX & SWT 3
A Problem Spiel auf Panel der GUI zu bringen AWT, Swing, JavaFX & SWT 1
A JavaFX Controller Problem AWT, Swing, JavaFX & SWT 1
TheWhiteShadow JavaFX ListView Problem beim Entfernen von Elementen AWT, Swing, JavaFX & SWT 1
E LayoutManager Welcher Layout-Mix löst mein Problem? AWT, Swing, JavaFX & SWT 3
Umb3rus JavaFX Problem mit PropertyValueFactory: can not read from unreadable property AWT, Swing, JavaFX & SWT 1
T Problem mit paintComponent() AWT, Swing, JavaFX & SWT 17
AmsananKING Java Menü-Problem AWT, Swing, JavaFX & SWT 1
K JavaFX Resizing-Problem beim BorderLayout (Center Component) beim Arbeiten mit mehreren FXMLs AWT, Swing, JavaFX & SWT 2
G Instance OF Problem AWT, Swing, JavaFX & SWT 9
FrittenFritze Ein Problem mit der CSSBox, die Größe wird nicht angepasst AWT, Swing, JavaFX & SWT 5
M Problem mit dem Anzeigen von Frames im Vordergrund AWT, Swing, JavaFX & SWT 5
Badebay Problem mit JButton AWT, Swing, JavaFX & SWT 2
newJavaGeek Grid-Layout problem AWT, Swing, JavaFX & SWT 7
J JavaFX Löschen im Tabelview macht Problem AWT, Swing, JavaFX & SWT 15
JavaTalksToMe JavaFx ExekutorService Problem AWT, Swing, JavaFX & SWT 2
Zrebna Problem bei Eventhandling (Value soll nach jedem erneutem Klick gelöscht werden) AWT, Swing, JavaFX & SWT 4
B Problem mit JavaFX AWT, Swing, JavaFX & SWT 5
J css Problem AWT, Swing, JavaFX & SWT 5
B JavaFX habe mein Problem fett markiert AWT, Swing, JavaFX & SWT 2
A Swing Filter-Problem AWT, Swing, JavaFX & SWT 1
temi JavaFX Problem mit IntelliJ und JavaFx 11 unter XUbuntu AWT, Swing, JavaFX & SWT 3
L Java FX Problem mit Ubuntu 18 und JavaFx AWT, Swing, JavaFX & SWT 27
H JTable TableCellEditor-Problem AWT, Swing, JavaFX & SWT 0
kodela Swing Problem mit Warten-Dialog AWT, Swing, JavaFX & SWT 16
B JavaFx Scene Builder Problem AWT, Swing, JavaFX & SWT 2
B [Problem] Java öffnet Word-Datein nicht AWT, Swing, JavaFX & SWT 14
T DataBinding Problem AWT, Swing, JavaFX & SWT 5
Blender3D Problem mit € Symbol Font Gotham Windows 10 Swing AWT, Swing, JavaFX & SWT 11
T Problem mit JTable Sortierung AWT, Swing, JavaFX & SWT 2
J Problem mit Platfrom run later AWT, Swing, JavaFX & SWT 15
J Problem mit Platfrom run later AWT, Swing, JavaFX & SWT 0
D Swing SwingUtils / Thread Problem AWT, Swing, JavaFX & SWT 3
L JavaFX Problem beim Aufrufen einer Methode AWT, Swing, JavaFX & SWT 5
T Swing Problem mit Datum und FormattedTextField AWT, Swing, JavaFX & SWT 2
S AWT Java print dialog Problem AWT, Swing, JavaFX & SWT 0
olfibits JavaFX Problem mit HTMLEditor AWT, Swing, JavaFX & SWT 0
W SWT hover-background-problem with first column in TreeViewer AWT, Swing, JavaFX & SWT 0
M Problem mit Add JScrollPane AWT, Swing, JavaFX & SWT 25
Mario1409 Swing JTextArea scroll Problem AWT, Swing, JavaFX & SWT 0
N Swing Problem mit loop AWT, Swing, JavaFX & SWT 2
S Swing Problem mit Button und ActionListener AWT, Swing, JavaFX & SWT 5
S Swing & Clean und build Problem AWT, Swing, JavaFX & SWT 12
S JLabel setText() Problem AWT, Swing, JavaFX & SWT 6
I 2D-Grafik Problem beim Ändern der Farbe eine 2d Objekts AWT, Swing, JavaFX & SWT 3
G Swing Splitpane Problem AWT, Swing, JavaFX & SWT 1
F Problem mit der FXML Rectangle Shape AWT, Swing, JavaFX & SWT 2
N JavaFX Stranges Problem mit der Autoscroll-Eigenschaft von Textareas AWT, Swing, JavaFX & SWT 0
E Java FX FXML Problem mit html Scriptausführung AWT, Swing, JavaFX & SWT 2
J JavaFX Intersect Problem mit Shapes AWT, Swing, JavaFX & SWT 10

Ähnliche Java Themen

Neue Themen


Oben