# JOptionPane.showMessageDialog(.)



## Schwarzeradler1903 (15. Apr 2006)

Hallo Leute,

wie kann man mit JOptionPane , die Messagen fett gedruckt ausgeben?
Habe folgendes eingegeben , es scheint aber nicht zu funktionieren:



```
JOptionPane.showMessageDialog(null,
                       
                       "<html><body>Man stellt fest, dass [b]Julia[/b] das Treffen mit .....</body></html>",
                      
                       "Es war nicht korrekt...",
                        
                       JOptionPane.WARNING_MESSAGE);
```


Da soll z.B Julia fettgedruckt sein, was ich mit *Julia*  probiert habe und was nicht ging. 

Kennt jemand Hilfe, oder eine andere Lösung ausser JOptionPane? Es soll nur beim drücken eines Buttons mit falscher Eingabe, eine DialogFenster gezeigt werden , was wie oben dargestellt ist.

Danke im Voraus

Taha


----------



## RawBit (15. Apr 2006)

genau das selbe problem hatte ich auch...

ich hab einafch mit nem selbst geschriebenen JDialog gemacht und jlabels hinzugefügt

Und JDialogs schauen doch schöner aus


----------



## Schwarzeradler1903 (15. Apr 2006)

Was meinst du genau mit "selbst geschriebenes JDialog" ? Kannst du mir ein Beispiel geben?


----------



## RawBit (15. Apr 2006)

```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class test extends JDialog {

  public test(JFrame owner, String title, boolean modal) {
    // Dialog-Initialisierung
    super(owner, title, modal);
    addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent evt) { setVisible(false);}
    });
    int frameWidth = 300;
    int frameHeight = 300;
    setSize(frameWidth, frameHeight);
    Container cp = getContentPane();
    cp.setLayout(null);
    // Anfang Komponenten

    // Ende Komponenten

    setResizable(false);
    setVisible(true);
  }
}
```

Ab da musst du selbst weiter machen können...

wie man jlabel und jbuttons einfügt weißt du hoffentlich


----------



## Schwarzeradler1903 (15. Apr 2006)

Danke für die Informationen

Wie man jLabels und jButtons einfügt weiss ich. Aber ich brauch keine JFrames oder WondowAdapter usw.

Ich programmiere Applets und das hat nichts mit JFrames zu tun. Das Dialog Feld soll auch nicht mit "x" geschlossen werden (also es soll kein Fenster sein) , sondern nur mit "OK" Button. Gibts da für Applets auch eine Lösung? Kann man in Konstruktor auch Applets übergeben?


----------



## RawBit (15. Apr 2006)

das jdialog müsste auch im applet funktionieren. wenn du kein x willst schreib dazu

```
setUndecorated(true);
```
dann ist der ganze blaue rand weg (und somit auch das X
es lässt sich nur noch mit ok schließen...

PS: das ist kein JFrame sondern JDialog


----------



## L-ectron-X (15. Apr 2006)

Ähm wart mal...
...nur dass ich das richtig verstehe. Du willst ein Applet mit einem OK-Button schließen?
Das geht nicht. Ein Applet hat nicht die Macht die VM zu beenden, bzw. den Browser zu schließen.


----------



## RawBit (15. Apr 2006)

ich glaub er will den jdialog mit nem ok-button schließen, oder äh


----------



## Schwarzeradler1903 (16. Apr 2006)

Ich weiss schon, dass ich das Applet nicht mit OK -Button schliessen kann. Es ist folgendes:

Ich habe ein Applet programmiert , bei der man eine Frage mit ja oder nein beantworten kann. Nach dem man ja oder nein (mit JCheckBoxs dargestellt) getippt hat, muss man auf einen Button klicken, um das Ergebnis zu sehen, ob man die Frage richtig beantwortet hat. Und wenn die Frage falsch beantwortet ist, dann kommt ein Dialog Fenster mit einem Passenden Hinweis zu der Frage. Und in dieser Dialog Fenster soll ein wort Fett gedrückt erscheinen und dieses Dialog Fenster soll keine x irgendwas erhalten. Dieses Dialog Fenster soll man nur mit dem eigenen OK button schliessen und bevor man es noch nicht geschlossen hat, darf man keine weiterer Buttons usw. auf dem Applet klicken. 


Ich hoffe , ich hatte es gut erklären können.


----------



## Schwarzeradler1903 (16. Apr 2006)

#L-ectron-X

ein süßes Kind hast du. Ich wünsche ihm alles gute und viel Erfolg im Leben.


----------



## lin (16. Apr 2006)

> ...und bevor man es noch nicht geschlossen hat, darf man keine weiterer Buttons usw. auf dem Applet klicken.


dann musst dus auch noch modal machen, #setModal(true)


----------



## L-ectron-X (16. Apr 2006)

Wenn dein Dialog keine Möglichkeit zum Schließen, außer ein Button erhalten soll, solltest du Hackl's dritten Hinweis nutzen. Das Fenster hat dann keine Rahmen und Titelleisten mehr.


			
				Schwarzeradler1903 hat gesagt.:
			
		

> ein süßes Kind hast du. Ich wünsche ihm alles gute und viel Erfolg im Leben.


Danke. Ich wünsch' mir das für meine Tochter auch.


----------



## RawBit (16. Apr 2006)

das undecorated kann schon sehr nützlich sein aber ich finde dass das fenster furchtbar ohne rahmen aussieht...


----------



## Schwarzeradler1903 (16. Apr 2006)

Das wichtigste ist, dass man nichts weiter machen kann, bevor man das JDialog geschlossen hat. Ist das der Fall, wenn ich die Titel-Leiste dran lasse?  Wenn es so ist, dann ist mir auch egal ob mit Titel-Leiste oder ohne. 

Ich bin noch nicht dazu gekommen eure Ideen einzusetzen, werde erst heute Abend machen, mal schauen wie es aussieht.


----------



## L-ectron-X (16. Apr 2006)

Ein JDialog sperrt, so fern er modal ist, alle weiteren Fenster, die vor ihm geöffnet wurden.
Das macht er auch unabhängig von der Existenz einer Titelleiste.
Das heißt, du musst den Dialog erst schließen, um asn die anderen Fenster zu kommen.
Dabei wirkt das "X" im Normalfall wie ein Abbruch. Im Normalfall deshalb, weil du ja die windowClosing()-Methode aus WindowListener nach Belieben mit Code füllen kannst, der dir bspw. statt den Dialog zu schließen 5 weitere öffnet. :wink:

Hier mal ein Beispiel eines Dialogs ohne das "X" zum Schließen. Du musst dich hier selbst um das Aussehen kümmern. Auch um die Möglichkeit, den Dialog verschieben zu können, weil hier die echte Titelleiste ausgeblendet wurde.

```
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.border.*;

public class DialogTest extends JDialog {
   private JLabel titleLabel;
   private JLabel messageLabel;
   private JPanel contentPanel;
   private JButton button;
   private JPanel buttonPanel;
   private int xPos, yPos;

   public DialogTest(Frame frame, String title, boolean modal) {
      super(frame, modal);
      setSize(300, 120);
      setLocationRelativeTo(null);
      setUndecorated(true);
      
      contentPanel = new JPanel(new BorderLayout());
      contentPanel.setBorder(new BevelBorder(BevelBorder.RAISED));
      
      messageLabel = new JLabel("<html>Texte können auch [b]fett[/b] geschrieben werden.</html>", SwingConstants.CENTER);
      contentPanel.add(messageLabel, BorderLayout.CENTER);
      
      titleLabel = new JLabel(title);

      //Verschieben des Dialogs ermöglichen 
      titleLabel.addMouseMotionListener(new MouseMotionAdapter() {
         public void mouseDragged(MouseEvent e) {
            Point window = DialogTest.this.getLocation();
            DialogTest.this.setLocation(window.x+e.getX()-xPos, window.y+e.getY()-yPos);
         }
      });
      
      //wird benötigt, um die Mausposition beim Klicken zu bestimmen
      titleLabel.addMouseListener(new MouseAdapter() {
         public void mousePressed(MouseEvent e) {
            xPos = e.getX();
            yPos = e.getY();
         }
      });
      titleLabel.setBackground(Color.BLUE.darker());
      titleLabel.setForeground(Color.WHITE);
      titleLabel.setOpaque(true);
      titleLabel.setBorder(new EtchedBorder());
      
      button = new JButton("OK");
      button.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            System.exit(0); //muss in einem realen Programm auskommentiert werden!
            setVisible(false);
            dispose();
         }
      });
      
      buttonPanel = new JPanel();
      buttonPanel.setBorder(new EmptyBorder(new Insets(0, 0, 10, 0)));
      buttonPanel.add(button);
      
      contentPanel.add(titleLabel, BorderLayout.NORTH);
      contentPanel.add(buttonPanel, BorderLayout.SOUTH);
      add(contentPanel);
      setVisible(true);
   }

   //Methode zum Testen
   public static void main(String[] args) {
      //LookAndFeel des Systems benutzen
      try {
         UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
      }
      catch(Exception e) {}
      new DialogTest(new JFrame(), "DialogTest", true);
   }
}
```


----------



## Schwarzeradler1903 (22. Apr 2006)

Hi,

@L-ectron-X   

ich habe dein Code ausprobiert, aber leider kommen viele Exceptions bei mir. was könnte der Grund sein?




Exception in thread "AWT-EventQueue-1" java.lang.NullPointerException
	at java.awt.Container.addImpl(Container.java:1019)
	at java.awt.Container.add(Container.java:351)
	at geschichten.Geschichten$DialogTest.<init>(Geschichten.java:1439)
	at geschichten.Geschichten.actionPerformed(Geschichten.java:874)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:234)
	at java.awt.Component.processMouseEvent(Component.java:5488)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3093)
	at java.awt.Component.processEvent(Component.java:5253)
	at java.awt.Container.processEvent(Container.java:1966)
	at java.awt.Component.dispatchEventImpl(Component.java:3955)
	at java.awt.Container.dispatchEventImpl(Container.java:2024)
	at java.awt.Component.dispatchEvent(Component.java:3803)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
	at java.awt.Container.dispatchEventImpl(Container.java:2010)
	at java.awt.Component.dispatchEvent(Component.java:3803)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
	at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)


----------



## RawBit (22. Apr 2006)

du solltest dir den code per copy & paste holen :roll:

es funktinoert alles...


----------



## Illuvatar (22. Apr 2006)

Ich glaub ihr steigert euch etwas zu sehr in den JDialog rein. Er will doch eigentlich nur eine JOptionPane, bei der ein Wort fett geschrieben ist.
Das geht normal aber nicht, da in dem Metal-Laf sowieso schon alles fett ist. Eine Lösungsmöglichkeit wäre, einfach den restlichen Text der JOptionPane auf normal zu setzen:

```
JOptionPane.showMessageDialog(null,
                       "<html><body><span style=\"font-weight:normal\">Man stellt fest, dass <span style=\"font-weight:bold\">Julia</span> das Treffen mit .....</span></body></html>",
                       "Es war nicht korrekt...",
                       JOptionPane.WARNING_MESSAGE);
```
(die Angabe font-weight:bolder wird leider nicht interpretiert)
Das passt dann aber leider nicht zum Rest. Eine weitere Möglichkeit wäre deshalb, gleich am Anfang in der init() für das Metal-LaF die Standard-fettschrift auszuschalten:

```
javax.swing.UIManager.put("swing.boldMetal", Boolean.FALSE);
```

SOnst musst du eben kursiv, unterstrichen oder so nehmen


----------



## L-ectron-X (22. Apr 2006)

Ja, Schwarzeradler1903 könnte aber auch genauso gut einfach das System-LookAndFeel verwenden.
Allerdings weiß ich jetzt nicht, wie das bspw. unter Linux aussehen würde.

```
import javax.swing.*;

public class JOptionPaneTest {

   public static void main(String[] args) {
      try {
         UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
      }
      catch(Exception e) {}
      
      JOptionPane.showMessageDialog(null, "<html>Anzeige eines [b]fett[/b] geschriebenen Wortes</html>",
      "Test", JOptionPane.INFORMATION_MESSAGE);
   }
}
```
Der erste Code entstand eigentlich nur, weil er meinte, er hätte gerne einen Dialog, bei dem das "X" zum Schließen fehlt.


----------



## Schwarzeradler1903 (22. Apr 2006)

> du solltest dir den code per copy & paste holen icon_rolleyes.gif



Das habe ich genau so gemacht, bloß ohne die main-methode. Ich programmiere Applets und keine Applications. Aber dann gibts diese Fehlermeldungen, was könnte der Grund sein?




> Der erste Code entstand eigentlich nur, weil er meinte, er hätte gerne einen Dialog, bei dem das "X" zum Schließen fehlt.



Sagen wir mal so, es kann die Titelleiste und auch "X"  da sein. Das wichtigste ist, dass man nichts anderes machen kann, bevor man das Dialog geschlossen hat. Und das geht ja , wie ihr gesagt habt, mit modul usw.  
Deswegen kann dieses Dialog von Dialog-Klasse erben ( wie die erste  lange Code von @L-ectron-X) und es muss nicht unbedingt JOptionPane sein.





> Ich glaub ihr steigert euch etwas zu sehr in den JDialog rein. Er will doch eigentlich nur eine JOptionPane, bei der ein Wort fett geschrieben ist.
> Das geht normal aber nicht, da in dem Metal-Laf sowieso schon alles fett ist. Eine Lösungsmöglichkeit wäre, einfach den restlichen Text der JOptionPane auf normal zu setzen:
> 
> 
> ...



Das könnte ich durchaus einsetzen, aber ich würde gerne wissen , warum es mit Dialog-Klasse bei mir nicht funktioniert hat. Und ich würde gerne zwischen beiden Dialogs ein Vergleich machen.


----------



## L-ectron-X (22. Apr 2006)

Wie hast du denn den Dialog aufgerufen?


----------



## Schwarzeradler1903 (22. Apr 2006)

so wie du in main Methode geschrieben hast.

new DialogTest(new JFrame(), "DialogTest", true);


----------



## L-ectron-X (22. Apr 2006)

Hmm, ich fürchte ohne Code komme ich da nicht weiter.


> at geschichten.Geschichten$DialogTest.<init>(Geschichten.java:1439)


Was passiert da?
Und liegt die Klasse DialogTest auch im Package geschichten?


----------



## Schwarzeradler1903 (22. Apr 2006)

"geschichten" ist Projektname und "Geschichten" ist die Public-Klasse (Da steht fast das ganze code). 

Und DialogTest-Klasse ist in dem selben Quellcode wie "Geschichten" (aber nicht als innere klasse)


----------

