JPanel zu JFrame hinzufügen

  • Themenstarter Themenstarter Guest
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo Leute,

ich hab folgendes Problem. Ich habe einen Klasse GUI mit BoarderLayout, welche ein JFrame ist. Eine Klasse GUIStrg zum steuern der Aktionen und zwei weitere Klassen, welche JPanels sein sollen und mit verschieden dingen wie Textfelder, Labels usw. bestückt sind.

So weit so gut, ich möchte nun, wenn ich das Programm starte zunächst einmal nur das Menü oben sehen (was auch geht) und wenn ich im Menu "Neu" auswähle sich ein JPanel im Center des Frames hinzugefügt wird. Das JPanel soll eines von den zwei weiteren Klassen sein. Aber das bekomme ich nicht hin also schon irgendwie aber es kommen nur Fehlermeldungen.

Vielleicht kann mir ja einer von Euch helfen, wenn Ihr meinen Quelltext braucht kein Prob. der kann kommen.
 
Also folgende Fehlermeldungen werden ausgegeben:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at GUIStrg.neuesDoc(GUIStrg.java:61)
at GUIStrg.actionPerformed(GUIStrg.java:18)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.AbstractButton.doClick(Unknown Source)
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source)
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(Unknown Source)
at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
 
Eine NullPointerException deutet eigentlich immer darauf hin, daß ein Objekt nicht instanziiert ist. Poste doch mal ein Stück Code um die Zeile herum, wo die Exception geworfen wird, als Zeile 61 in GUIStrg und ein paar Zeilen davor.
 
Ich hab hier mal das eine JPanel und danach die GUIStrg.

Code:
import java.awt.*;

import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;


public class BriefPanel extends JPanel {
	private GUI gui;
	private JPanel briefPanel;
	private XmlDatenPanel xmlDatenPanel;
	private JTextArea datum, empfaenger, absender, betreff, anrede, text, name, anlagen;
	private JLabel ldatum, lempfaenger, labsender, lbetreff, lanrede, ltext, lgrusformel, lname, lanlagen;
	private JComboBox grusformel;
	private Container cont;
	
	public BriefPanel(){
		
		// Panel fuer Container im center des Frames
		briefPanel = new JPanel();
		setBackground(Color.orange);
		setVisible(false);
		
		// Container erzeugen
		cont = new Container();
		
		// Panel mit Container fuellen
		briefPanel.add(cont);
		
		GridBagLayout gbl = new GridBagLayout();
		
		// Container mit GridLayout fuellen
		cont.setLayout(gbl);
		
		GridBagConstraints gbc = new GridBagConstraints();
		
		// Komponenten werden erstellt
		ldatum = new JLabel("Datum:");
		datum = new JTextArea("tt.mm.jjjj", 1, 20);
		labsender = new JLabel("Absender:");
		absender = new JTextArea(1,40);
		lempfaenger = new JLabel("Empfänger:");
		empfaenger = new JTextArea(1,40);
		lbetreff = new JLabel("Betreff:");
		betreff = new JTextArea(1,20);
		lanrede = new JLabel("Anrede:");
		anrede = new JTextArea(1,20);
		ltext = new JLabel("Text:");
		text = new JTextArea(3,80);
		lgrusformel = new JLabel("Grußformel:");
		grusformel = new JComboBox();
		lname = new JLabel("Unterschrift:");
		name = new JTextArea(1,10);
		lanlagen = new JLabel("Anlagen:");
		anlagen = new JTextArea(1,10);
		
		// fügt Komponenten an Kontainer
		addComponent(cont, gbl, ldatum, 0, 0, 3, 1, 0.0, 0.0 );
		addComponent(cont, gbl, datum, 0, 1, 2, 1, 0, 0.0 );
		addComponent(cont, gbl, labsender, 0, 2, 3, 1, 0, 1.0 );
		addComponent(cont, gbl, absender, 0, 3, 2, 1, 0, 1.0 );
		addComponent(cont, gbl, lempfaenger, 0, 4, 3, 1, 0, 1.0 );
		addComponent(cont, gbl, empfaenger, 0, 5, 2, 1, 0, 1.0 );
		addComponent(cont, gbl, lbetreff, 0, 6, 3, 1, 0, 1.0 );
		addComponent(cont, gbl, betreff, 0, 7, 3, 1, 0, 1.0 );
		addComponent(cont, gbl, lanrede, 0, 8, 3, 1, 0, 1.0 );
		addComponent(cont, gbl, anrede, 0, 9, 3, 1, 0, 1.0 );
		addComponent(cont, gbl, ltext, 0, 10, 3, 1, 0, 1.0 );
		addComponent(cont, gbl, text, 0, 11, 3, 1, 0, 1.0 );
		addComponent(cont, gbl, lgrusformel, 0, 12, 3, 1, 0, 1.0 );
		addComponent(cont, gbl, grusformel, 0, 13, 2, 1, 0, 1.0 );
		addComponent(cont, gbl, lname, 0, 14, 3, 1, 0, 1.0 );
		addComponent(cont, gbl, name, 0, 15, 1, 1, 0, 1.0 );
		addComponent(cont, gbl, lanlagen, 0, 16, 3, 1, 0, 1.0 );
		addComponent(cont, gbl, anlagen, 0, 17, 1, 1, 0, 1.0 );
		
		validate();
	}
	
	public void panelSichtbar(){
		BriefPanel briefPanel = new BriefPanel();
		briefPanel.setVisible(true);
		gui.add(briefPanel);
	}
	
	/**
	 * 
	 * @param cont
	 * @param gbl
	 * @param c
	 * @param x
	 * @param y
	 * @param width
	 * @param height
	 * @param weightx
	 * @param weighty
	 * 
	 * Hängt Objekte an GridBagLayout
	 */
	static void addComponent( Container cont, GridBagLayout gbl, Component c, 
			int x, int y, int width, int height, double weightx, double weighty ){
		
		GridBagConstraints gbc = new GridBagConstraints();
		gbc.fill = GridBagConstraints.BOTH;
		gbc.gridx = x; 
		gbc.gridy = y;
		gbc.gridwidth = width; 
		gbc.gridheight = height;
		gbc.weightx = weightx; // verteilung des horizontalen und vertikalen platzes
		gbc.weighty = weighty;
		gbl.setConstraints( c, gbc );
		cont.add( c );
		}
	
}

Code:
import java.awt.event.*;
import javax.swing.*;


public class GUIStrg implements ActionListener{
	private GUI gui;
	private BriefPanel briefPanel;
	private XmlDatenPanel xmlDatenPanel;
	
	public GUIStrg(GUI g){
		gui = g;
	}
	
	public void actionPerformed(ActionEvent e){
		String unters = e.getActionCommand();
		if (unters.equals("Neu"))
		{
			neuesDoc();
		}
		else if (unters.equals("Öffnen"))
		{
			openDoc();
		}
		else if (unters.equals("Speichern")||unters.equals("Speichern unter..."))
		{
			saveDoc();
		}
		else if (unters.equals("Drucken"))
		{
			drucken();
		}
		else if (unters.equals("HTML")||unters.equals("PFD")||unters.equals("WORD"))
		{
			konvertieren();
		}
		else if (unters.equals("Beenden"))
		{
			ende();
		}
		else if (unters.equals("Deutsch")||unters.equals("Englisch"))
		{
			sprache();
		}
		else if (unters.equals("Einstellungen"))
		{
			einstellungen();
		}
		else if (unters.equals("Info"))
		{
			info();
		}
		else if (unters.equals("Hilfe"))
		{
			openDoc();
		}
	}
	
	// Methoden fuer Dokumentenmenue
	
	public void neuesDoc(){
		briefPanel.panelSichtbar();
	}
	
	public void openDoc(){
		JFileChooser fc = new JFileChooser();
		int state = fc.showOpenDialog( null );
	}
	
	public void saveDoc(){
		JFileChooser fc = new JFileChooser();
		int state = fc.showSaveDialog( null );
	}
	
	public void drucken(){
		
	}
	
	public void konvertieren(){
		
	}
	
	public void ende(){
		System.exit(0);
	}
	
	// Methoden fuer Optionsmenue
	
	public void sprache(){
		
	}
	
	public void einstellungen(){
		
	}
	
	// Methoden fuer Hilfemenue
	
	public void info(){
		
	}
	
	public void hilfe(){
		
	}
}
 
hab es jetzt in der Methode gemacht

Code:
	public void neuesDoc(){
		briefPanel = new BriefPanel();
		briefPanel.panelSichtbar();
	}

aber das geht immernoch nich :-(
 
vllt gibts die Probleme, weil du briefPanel einmal lokal und einmal global neu anlegst? also in der briefpanel-klasse, einmal als JPanel und einmal als BriefPanel. ?
 
Hallo,

falls ich meine GUI-Komponente in Java ausdrucken lasse, dann gibt es das Problem, dass die Komponenten nicht vollständig ausgedruckt werden, da die pixels von meinen Komponenten wahrscheinlich mehr sind als die meines Druckers. Ich bekomme nur ein viertel meines GUI-Komponentes ausgedruckt. Dann sind die Schrieften auch sehr groß.

Meine Frage: Wie sorge ich dafür dass meine GUI-Komponente genau so ausgedruckt wird, wie es auf ein DIN A4 passt ?
Ich möchte es vollständig gedruckt haben und nicht nur das erste viertel meines Komponentes. Ich schaffe es aber nicht, was muss ich machen?

Ich benutze folgende Hilfsklasse und rufe dann
Code:
PrintUtilities.printComponent(componentToBePrinted)
auf.

Code:
import java.awt.*;

import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.swing.*;
import java.awt.print.*;

/** A simple utility class that lets you very simply print
 *  an arbitrary component. Just pass the component to the
 *  PrintUtilities.printComponent. The component you want to
 *  print doesn't need a print method and doesn't have to
 *  implement any interface or do anything special at all.
 *  


 *  If you are going to be printing many times, it is marginally more 
 *  efficient to first do the following:
 *  <PRE>
 *    PrintUtilities printHelper = new PrintUtilities(theComponent);
 *  </PRE>
 *  then later do printHelper.print(). But this is a very tiny
 *  difference, so in most cases just do the simpler
 *  PrintUtilities.printComponent(componentToBePrinted).
 *
 *  7/99 Marty Hall, [url]http://www.apl.jhu.edu/~hall/java/[/url]
 *  May be freely used or adapted.
 */

public class PrintUtilities implements Printable {
  private Component componentToBePrinted;

  public static void printComponent(Component c) {
    new PrintUtilities(c).print();
  }
  
  public PrintUtilities(Component componentToBePrinted) {
    this.componentToBePrinted = componentToBePrinted;
  }
  
  public void print() {
    PrinterJob printJob = PrinterJob.getPrinterJob();
    PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
    PageFormat pf = printJob.pageDialog(aset);
    printJob.setPrintable(this, pf);
    if (printJob.printDialog())
      try {
        printJob.print();
      } catch(PrinterException pe) {
        System.out.println("Error printing: " + pe);
      }
  }

  public int print(Graphics g, PageFormat pageFormat, int pageIndex) {
    if (pageIndex > 0) {
      return(NO_SUCH_PAGE);
    } else {
      Graphics2D g2d = (Graphics2D)g;
      g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
      disableDoubleBuffering(componentToBePrinted);
      componentToBePrinted.paint(g2d);
      enableDoubleBuffering(componentToBePrinted);
      return(PAGE_EXISTS);
    }
  }

  /** The speed and quality of printing suffers dramatically if
   *  any of the containers have double buffering turned on.
   *  So this turns if off globally.
   *  @see enableDoubleBuffering
   */
  public static void disableDoubleBuffering(Component c) {
    RepaintManager currentManager = RepaintManager.currentManager(c);
    currentManager.setDoubleBufferingEnabled(false);
  }

  /** Re-enables double buffering globally. */
  
  public static void enableDoubleBuffering(Component c) {
    RepaintManager currentManager = RepaintManager.currentManager(c);
    currentManager.setDoubleBufferingEnabled(true);
  }
}
[/code]
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben