Fenster wird nicht richtig aufgebaut



  • Hallo, hallo.

    Woran kann es liegen, dass mein Fenster nicht richtig aufgebaut wird, wenn ich das Programm starte?
    Zum Beispiel werden manchmal Textfelder nicht angezeigt, oder auch Buttons, wobei sie sichtbar werden, wenn man mit der Maus drüber fährt.

    Meistens geht es wenn man das Programm erneut startet. Dann ist alles da.



  • zuwenig infos.

    was fürn fenster? jframe? frame? was anderes?
    was für eine applikation, applet, standalone..?

    setVisible gemacht?

    ohne code schwer zu sehen.



  • bei swing passiert das gern mal, wenn man widgets ohne konfigurierten layout manager ins "falsche" pane schmeisst. eigentlich sollten alle add() methoden an den containern ans content pane delegieren, alle widgets in den controller, den getContentPane() liefert zu platzieren, ist allerdings die eigentliche vorgehensweise.


  • Mod

    Woolve schrieb:

    Woran kann es liegen, dass mein Fenster nicht richtig aufgebaut wird, wenn ich das Programm starte?

    Hi. Das liegt typischerweise an einer falschen Nutzung des jeweiligen GUI-Toolkits. Was man nahezu ausschließen kann, ist, dass das durch Bugs in der Standardbibliothek entsteht. Insofern rate ich Dir, Dich etwas mehr mit Swing zu beschäftigen, oder was auch immer Du nimmst. Oder zumindest konkreten Code zu posten, falls Du eine konkrete Fehlerdiagnose von dem Forum hier haben möchtest.

    PS: Es sei denn, Du nutzt das SWT. In dem Fall möchte ich mich nicht dazu äußern.



  • OK Leute.

    Ich poste jetz einfach mal den Code.
    Vielleicht sieht jemand von euch meinen Fehler.

    import java.awt.*;
    import java.awt.event.*;
    import java.net.URL;
    import javax.swing.*;
    
    public class ColorCalc_v0_1 extends Frame
    {
    
    	public static JButton buttonAbout = new JButton("?");
    	public static JButton buttonToRGB  = new JButton("Hex >> RGB");
    	public static JButton buttonToHEX  = new JButton("RGB >> Hex");
    	public static JButton buttonExit  = new JButton("Beenden");
    
    	public static JLabel labelR    = new JLabel("Rot");
    	public static JLabel labelG    = new JLabel("Grün");
    	public static JLabel labelB    = new JLabel("Blau");
    	public static JLabel labelHexa = new JLabel("Hexadezimal:");
    
    	public static JTextField textR   = new JTextField("", 3);
    	public static JTextField textG   = new JTextField("", 3);
    	public static JTextField textB   = new JTextField("", 3);
    	public static JTextField textHEX = new JTextField("#", 7);
    
    	public JPanel panel = new JPanel();
    
    	private MyActionListener myActionListener = new MyActionListener(this);
    
    	public static void addComponentsToPane(Container pane)
    	{
            pane.setLayout(null);
    
            pane.add(buttonAbout);
            pane.add(buttonToRGB);
            pane.add(buttonToHEX);
            pane.add(buttonExit);
            pane.add(labelR);
            pane.add(labelG);
            pane.add(labelB);
            pane.add(textR);
            pane.add(textG);
            pane.add(textB);
            pane.add(labelHexa);
            pane.add(textHEX);
    
            Insets insets = pane.getInsets();
            Dimension size;
    
            size = buttonAbout.getPreferredSize();
            buttonAbout.setBounds((140-size.width) + insets.left, 220 + insets.top, size.width, size.height);
            size = buttonExit.getPreferredSize();
            buttonExit.setBounds(160 + insets.left, 220 + insets.top, size.width, size.height);
    
            size = buttonToHEX.getPreferredSize();
            buttonToHEX.setBounds((140-size.width) + insets.left, 180 + insets.top, size.width, size.height);
            size = buttonToRGB.getPreferredSize();
            buttonToRGB.setBounds(160 + insets.left, 180 + insets.top, size.width, size.height);
    
            size = labelR.getPreferredSize();
            labelR.setBounds((75-(size.width/2)) + insets.left, 40 + insets.top, size.width, size.height);
            size = labelG.getPreferredSize();
            labelG.setBounds((150-(size.width/2)) + insets.left, 40 + insets.top, size.width, size.height);
            size = labelB.getPreferredSize();
            labelB.setBounds((225-(size.width/2)) + insets.left, 40 + insets.top, size.width, size.height);
    
            size = textR.getPreferredSize();
            textR.setBounds((75-(size.width/2)) + insets.left, 70 + insets.top, size.width, size.height);
            size = textG.getPreferredSize();
            textG.setBounds((150-(size.width/2)) + insets.left, 70 + insets.top, size.width, size.height);
            size = textB.getPreferredSize();
            textB.setBounds((225-(size.width/2)) + insets.left, 70 + insets.top, size.width, size.height);
    
            size = labelHexa.getPreferredSize();
            labelHexa.setBounds((150-(size.width/2)) + insets.left, 100 + insets.top, size.width, size.height);
            size = textHEX.getPreferredSize();
            textHEX.setBounds((150-(size.width/2)) + insets.left, 130 + insets.top, size.width, size.height);
        }
    
    	public ColorCalc_v0_1()
    	{
    		JFrame frame = new JFrame("ColorCalc");
    		URL iconURL = frame.getClass().getResource("/icon.png");
    		ImageIcon icon = new ImageIcon(iconURL);
    
    		frame.setIconImage(icon.getImage());
    		frame.setResizable(false);
    		frame.setBounds(200, 100, 300, 300);
    		frame.setVisible(true);
    
    		frame.add(panel);
    
    		panel.add(buttonAbout);
    		panel.add(labelR);
    		panel.add(labelG);
    		panel.add(labelB);
    		panel.add(textR);
    		panel.add(textG);
    		panel.add(textB);
    		panel.add(labelHexa);
    		panel.add(buttonToHEX);
    		panel.add(buttonToRGB);
    		panel.add(textHEX);
    		panel.add(buttonExit);
    
            addComponentsToPane(frame.getContentPane());
    
    		frame.addWindowListener(new MyWindowListener());
    
    		this.buttonAbout.addActionListener(myActionListener);
    		this.buttonToHEX.addActionListener(myActionListener);
    		this.buttonToRGB.addActionListener(myActionListener);
    		this.buttonExit.addActionListener(myActionListener);
    
    	}					// public ColorCalc_v0_1()
    
    	public static void main(String argv[])
    	{
    		ColorCalc_v0_1 calc = new ColorCalc_v0_1();
    	}					// public static void main()
    
    }						// public class ColorCalc_v0_1 extends Frame
    

    P.S.: Ich weiß, es ist schlecht kommentiert. Dafür möchte ich mich entschuldigen.



  • Der Code ist ziemlich kaputt. Warum leitest du die Klasse von java.awt.Frame ab, obwohl du Swing verwenden willst? Im Konstruktor definierst du dann eine lokale Variable vom Typ JFrame. So funktioniert das nicht.



  • Also dann besser

    public class ColorCalc_v0_1 extends JFrame
    

    Zähl mal bitte auf, was alles nicht stimmt.
    Danke!



  • Hab ich schon gesagt, du legst im Konstruktor eine lokale Variable vom Typ JFrame an. Das ist unnötig, da dein Objekt ja schon ein JFrame ist. Die Komponenten musst du also zu "this" (bzw. dem Content-Pane des JFrame) hinzufügen.


Anmelden zum Antworten