Java-newbie will Dialoge zentrieren und ein schönes GUI-Design haben

Dieses Thema im Forum "Java/Mono/dotGNU" wurde erstellt von DeeDee0815, 18.05.2007.

  1. #1 DeeDee0815, 18.05.2007
    DeeDee0815

    DeeDee0815 Doppel-As

    Dabei seit:
    13.02.2007
    Beiträge:
    130
    Zustimmungen:
    0
    Hallo,

    ich habe folgendes Problemchen:

    Ich möchte ein Dialogfenster relativ zum Elternfenster zentrieren:

    Code:
    public YesNoDialog(Frame owner, String msg)
    {
    	super(owner, "Frage");
    	Point parloc = owner.getLocation();
    	setLocation(parloc.x + (290 - WIDTH/2), parloc.y + (210 -HEIGHT/2));
    	setResizable(false);
    		
    	setLayout(new BorderLayout());
    		
    	add(new Label(msg), BorderLayout.CENTER);
    	Panel panel = new Panel();
    	panel.setLayout(new FlowLayout(FlowLayout.CENTER));
    	Button button = new Button("Ja");
    	button.addActionListener(this);
    	panel.add(button);
    		
    	button = new Button("Nein");
    	button.addActionListener(this);
    	panel.add(button);
    	add(panel, BorderLayout.SOUTH);
    		
    	pack();
    }
    So

    Code:
    	setLocation(parloc.x + (290 - WIDTH/2), parloc.y + (210 -HEIGHT/2));
    geht es eben nicht. Wie kann ich die größe des Dialogfensters auslesen. Festlegen mit setSize kann ich sie jedenfalls nicht.

    Mein zweites Problem ist, dass ich bei einem windowsbenutzenden Freund festgestellt habe, das mein Java-Programm die Windows-Design-Farben annimmt. Das was ich eben auch über Java 6 gehört habe. Unter Ubuntu (GNOME/GTK) geht das aber nicht. Muss ich als Programmierer nacharbeiten oder fehlt mir ein Javazusatzpaket?

    Mfg
    DeeDee0815
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 DeeDee0815, 28.05.2007
    DeeDee0815

    DeeDee0815 Doppel-As

    Dabei seit:
    13.02.2007
    Beiträge:
    130
    Zustimmungen:
    0
    HAAAAAALLLLLLLLLOOOOOOO!!!! Geht das mit dem Zentrieren nicht, oder was? Und was ist mit dem GUI-Design?

    MfG
     
  4. b00

    b00 Haudegen

    Dabei seit:
    28.03.2007
    Beiträge:
    597
    Zustimmungen:
    0
    Ort:
    /root
    ich glaub das dir keiner antwortet liegt daran dass keiner der mehr ahnung von java hat als du diesen thread gelesen hat. ich gehöre dazu! also gedulde dich!
     
  5. #4 foexle, 31.05.2007
    Zuletzt bearbeitet: 31.05.2007
    foexle

    foexle Kaiser

    Dabei seit:
    02.05.2007
    Beiträge:
    1.104
    Zustimmungen:
    0
    Ort:
    Saarbrücken
    hi poste mal bitte die gesamte class ... ich muss wissen was du eingeunden hast und von was du erbst
    .
    .
    .
    EDIT (autom. Beitragszusammenführung) :
    .

    versuchs mal so :)

    Code:
    setLocation(parloc.x + ( WIDTH/2-290), parloc.y + (HEIGHT/2-210));
    ich denke mal die hälfe des parent fensters ist grösser als 290 pixel aus diesem Grund hast du eine negative pixel zahl
     
  6. #5 DeeDee0815, 02.06.2007
    DeeDee0815

    DeeDee0815 Doppel-As

    Dabei seit:
    13.02.2007
    Beiträge:
    130
    Zustimmungen:
    0
    @foexi: Nein, so geht das nicht. Jetzt landet das Fenster "außerhalb" des parent-fensters.

    Hier die gesamte ModalDialog-Class, die etwas anders ist, als der ursprüngliche Code - allerdings mit dem Selben problem.

    Code:
    import java.awt.BorderLayout;
    import java.awt.Button;
    import java.awt.Dialog;
    import java.awt.FlowLayout;
    import java.awt.Frame;
    import java.awt.Label;
    import java.awt.Panel;
    import java.awt.Point;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.StringTokenizer;
    
    class ModalDialog
    extends Dialog
    implements ActionListener
    {
    	private static final long serialVersionUID = 1L;
    
    	String result;
    	
    	public static String OKDialog(Frame owner, String msg)
    	{
    		ModalDialog dlg;
    		dlg = new ModalDialog(owner, "Hinweis", msg, "OK");
    		dlg.setVisible(true);
    		return dlg.getResult();
    	}
    	
    	public static String YesNoDialog(Frame owner, String msg)
    	{
    		ModalDialog dlg;
    		dlg =  new ModalDialog(owner, "Frage", msg, "Ja,Nein");
    		dlg.setVisible(true);
    		return dlg.getResult();
    	}
    	
    	public static String YesNoCancelDialog(Frame owner, String msg)
    	{
    		ModalDialog dlg;
    		dlg = new ModalDialog(owner, "Frage", msg, "Ja,Nein,Abbrechen");
    		dlg.setVisible(true);
    		return dlg.getResult();
    	}
    	
    	public ModalDialog(Frame owner, String title, String msg, String buttons)
    	{
    		super(owner, title, true);
    		setLayout(new BorderLayout());
    		setResizable(false);
    		Point parloc = owner.getLocation();
    		setLocation(parloc.x + (290-(getWidth()/2)), parloc.y + 30);
    		add(new Label(msg), BorderLayout.CENTER);
    		Panel panel = new Panel();
    		panel.setLayout(new FlowLayout(FlowLayout.CENTER));
    		StringTokenizer strtok = new StringTokenizer(buttons, ",");
    		while (strtok.hasMoreTokens()) {
    			Button button = new Button(strtok.nextToken());
    			button.addActionListener(this);
    			panel.add(button);
    		}
    		add(panel, BorderLayout.SOUTH);
    		pack();
    	}
    	
    	public void actionPerformed(ActionEvent event)
    	{
    		result = event.getActionCommand();
    		setVisible(false);
    		dispose();
    	}
    	
    	public String getResult()
    	{
    		return result;
    	}
    }
    MfG
    DeeDee0815

    P.S.: @b00: Jaja, ich werde mich demnächst mehr in Gedult üben. Ich habe nur eben schonmal erlebt, dass ich ein halbes Jahr lang auf einen Beitrag keine Antwort bekam....

    Der Code ist übrigens nicht allein von mir. Den habe ich aus dem Java Buch "Handbuch der Java-Programmierung" abgeschrieben. Verstanden habe ich ihn aber schon - und angepasst.
     
  7. foexle

    foexle Kaiser

    Dabei seit:
    02.05.2007
    Beiträge:
    1.104
    Zustimmungen:
    0
    Ort:
    Saarbrücken
    gut dann fangen wir mal an :)
    also
    was mir direkt auffällt, was aber nichts mit dem Problem zu tun hat, sondern rein programmiertechnisch ist
    sowas macht mannicht in einen funktions aufruf, sondern erstellt für sowas eine innerClass

    also wenn ich mich so durch deinen Quellcode durchlese, kann ich keinen Syntax-fehler auf anhieb sehen.
    nur was mir halt auffällt, du setzt erst das Layout bevor du überhaupt weist, ab welchen kords dein Fenster zeichnen soll

    also bring das ganze mal in die richtige reihenfolge ... auch das du erst ein Label erzeugst dann ein Panel.... in deinem Buch sollte stehen, das man immer auf panels zeichnet

    desweitern implementiert man keine actionListener, da wenn sich dein Prog aufbläht du bei der Compelierung mehrere Interfaces direkt einbindest, und das bremst die performance
    machs besser so:
    im construkor

    Code:
    addIrgendEinListener(new MyListenerClass());
    weiter dann die innerclass
    Code:
    class MyListenerClass extends DenAdapter
    {
    <DIe Functions>
    }
    
    bring das so mal bischen iO


    da ich noch nicht genau weis, was dein fehler ist, sondern nur das dein fenster anscheinend nicht gezeichnet wird, das kann evtl sogar ganz einfach an den fehlern liegen die ich dir bisher aufgezählt habe...
    syntaktisch was du da schreibst ist richtig, nur logisch falsch platziert

    wenn du das gemacht hast, und immer noch nicht geht poste den function aufruf ....

    bzw haste mal das ganze verfolgt mit breakpoints?
     
  8. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
Thema:

Java-newbie will Dialoge zentrieren und ein schönes GUI-Design haben

Die Seite wird geladen...

Java-newbie will Dialoge zentrieren und ein schönes GUI-Design haben - Ähnliche Themen

  1. GTK+ 3.12 ändert das Aussehen der Dialoge

    GTK+ 3.12 ändert das Aussehen der Dialoge: Mit der Freigabe der neuen Version von Gtk+ werden die Entwickler unter anderem das Aussehen der Dialoge überarbeiten. Die wohl größte Änderung...
  2. Pro-Linux: Verbesserungen an Nautilus-Dateidialogen

    Pro-Linux: Verbesserungen an Nautilus-Dateidialogen: Pro-Linux präsentiert Ihnen heute einen kleinen Einblick in Pläne, die Dateidialoge von Nautilus zu verbessern. Weiterlesen...