tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
NEIN
ANTWORTEN
15
ZUGRIFFE
1452
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    merTii merTii ist offline Mitglied Silber
    Registriert seit
    Dec 2010
    Beiträge
    69
    Moin an alle,

    ich hoffe ich find hier ein Paar, die einem Anfänger der objektorientierten Programmierung weiterhelfen können.

    Bevor ich aber zu meiner Frage komme, erst einmal, was ich überhaupt vor habe zu programmieren:

    Ich will ein Prog mit grafischer Benutzeroberfläche erstellen, mit der ich in ganz Deutschland, Österreich und der Schweiz die Skigebiete mit den dazugehörigen Infomationen, wie z.B. Bild, Öffnungszeiten, etc. auslesen kann.

    Mit dem Schulwissen komm ich nur bis zu einem gewissen Punkt, doch mein erstes Problem ist:
    Ich habe mit Hilfe von Photoshop ein Bild erstellt. Dieses Bild (.jpg) würde ich gern als Hintergrundbild für meine GUI verwenden. Bevor ich mit der Programmierung beginne, würd ich gerne wissen, ob ich eine zusätzliche Class erstellen muss, oder ob ich das Bild mit angabe des Pfades und einer bestimmten Methode in meiner Klasse für die GUI (die sich dann "Hauptfenster" nennt) aufrufen kann?

    Ich hoffe, Ihr habt mein Problem verstanden und könnt mir im vorraus helfen, ansonsten beginne ich heute mit meinem Projekt und fragen dann noch einmal...

    Mit freundlichen greez

    merTii
     

  2. #2
    merTii merTii ist offline Mitglied Silber
    Registriert seit
    Dec 2010
    Beiträge
    69
    Ich will echt nicht unhöfflich wirken, aber über irgendein Zeichen wäre ich sehr erfreut
     

  3. #3
    merTii merTii ist offline Mitglied Silber
    Registriert seit
    Dec 2010
    Beiträge
    69
    Macht euch keine Mühe...ich hab mein Problem selber gelöst.
    Trotzdem danke für die 31 Clicks
     

  4. #4
    Avatar von timestamp
    timestamp timestamp ist offline Mitglied Rubin
    Registriert seit
    May 2010
    Ort
    Marburg
    Beiträge
    1.479
    Dann sei doch bitte so freundlich und helfe anderen (Anfängern) die das gleiche Problem haben dieses zu lösen und poste deine Lösung
     

  5. #5
    merTii merTii ist offline Mitglied Silber
    Registriert seit
    Dec 2010
    Beiträge
    69
    Oh klar, tut mir leid bin heute um 2:00 Uhr in der Nacht drauf gekommen

    Im Prinzip ist das ja gar nicht schwer...

    Die GUI erstellen, ein JLabel aufziehen und dann folgendes:

    Code :
    1
    2
    3
    4
    
    Image image = Toolkit.getDefaultToolkit().createImage("Pfad");
    btBild = new JLabel(new ImageIcon(image));
    btBild.setBounds(new Rectangle(2, 2, 699, 434));
    btBild.setText("JLabel");

    Die relevanten Zeilen sind die erste und zweite
     

  6. #6
    merTii merTii ist offline Mitglied Silber
    Registriert seit
    Dec 2010
    Beiträge
    69
    Ich hab noch eine weitere Frage, hoff ich kann sie auch hier stellen...und zwar habe ich nun ein Bild als Hintergrund, worauf zwei Buttons erscheinen sollten, aber wenn ich mein Prog ausführe, so erscheinen meine Buttons nur, wenn ich mit der Maus drüber fahre...könnt ihr mir da helfen`?
     

  7. #7
    Avatar von Akeshihiro
    Akeshihiro Akeshihiro ist offline Mitglied Platin
    Registriert seit
    Aug 2008
    Ort
    Kirchlengern (NRW)
    Beiträge
    647
    Dafür wirst du schon den Code posten müssen

    EDIT:
    Hab mal spaßeshalber was zusammengekloppt, das ein Hintergrundbild zeichnet und zwei Buttons hinzufügt, also eigentlich das, was du gemacht hast (hatte grad eh nix zu tun). Funktioniert so wie es soll. Hier mal der Code, Kommentare sind drin.

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    
    package de.tutorials.forum.hilfe.mertii.bgimage;
     
    import java.awt.Graphics;
    import java.awt.Image;
    import java.awt.MediaTracker;
     
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.UIManager;
    import javax.swing.UnsupportedLookAndFeelException;
     
    /**
     * Diese Klasse zeichnet ein Hintergrundbild und fügt zwei Buttons hinzu.
     * 
     * @author Akeshihiro
     */
    public class BgImageSample extends JFrame {
        /**
         * Versionkennung für die Serialisierung.
         */
        private static final long   serialVersionUID    = 3633606108685196952L;
     
        /**
         * Main-Methode.
         * 
         * @param args
         *            Programmparameter.
         */
        public static void main(String[] args) {
            new BgImageSample();
        }
     
        /**
         * Default-Konstruktor.
         */
        public BgImageSample() {
            initSettings();
            initComponents();
            initGui();
        }
     
        /**
         * Initialisiert die Komponenten, die im Fenster zu sehn sein sollen.
         */
        private void initComponents() {
            /*
             * Neue ContentPane setzen, die das Hintergrundbild zeichnet. Hier zu
             * Vorzeigezwecken alles in einem Schritt reingeklatscht, sollte im
             * Normalfall sauberer implementiert werden.
             */
            setContentPane(new JPanel() {
                /**
                 * Versionskennung für die Serialisierung.
                 */
                private static final long   serialVersionUID    = 366410619231078381L;
     
                /**
                 * Das Hintergrundbild.
                 */
                private Image               img;
     
                /*
                 * Da es sich hierbei um eine anonyme Klasse handelt, kann ich
                 * keinen expliziten Konstruktor deklarieren, daher wird das Bild in
                 * einem Initialisierer geladen.
                 */
                {
                    img = getToolkit().createImage("C:/bild.jpg");
     
                    MediaTracker mt = new MediaTracker(this);
                    mt.addImage(img, 1);
                    try {
                        mt.waitForAll();
                    } catch(InterruptedException e) {
                        e.printStackTrace();
                    }
                }
     
                /*
                 * (non-Javadoc)
                 * @see javax.swing.JComponent#paintComponent(java.awt.Graphics)
                 */
                @Override
                protected void paintComponent(Graphics g) {
                    g.drawImage(img, 0, 0, getWidth(), getHeight(), this);
                }
            });
     
            // Zwei Buttons hinzufügen
            getContentPane().add(new JButton("bt1"));
            getContentPane().add(new JButton("bt2"));
        }
     
        /**
         * Größe und Position festlegen und sichtbar machen.
         */
        private void initGui() {
            setSize(500, 500);
            setLocationRelativeTo(null);
            setVisible(true);
        }
     
        /**
         * Setzt ein paar grobe Einstellungen.
         */
        private void initSettings() {
            setTitle(getClass().getName());
            setDefaultCloseOperation(EXIT_ON_CLOSE);
     
            // Das Metal-LAF sieht beknackt aus, lieber das Systemeigene LAF nehmen
            try {
                UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            } catch(ClassNotFoundException e) {
                e.printStackTrace();
            } catch(InstantiationException e) {
                e.printStackTrace();
            } catch(IllegalAccessException e) {
                e.printStackTrace();
            } catch(UnsupportedLookAndFeelException e) {
                e.printStackTrace();
            }
        }
    }
    Geändert von Akeshihiro (02.01.11 um 11:17 Uhr)
     
    Man sagt, das Schwert eines Samurai sei seine Seele ...

    Mit den Beiträgen ist es wie mit Schwertern: Je besser die Rohstoffe sind und je öfter man diese bearbeitet, desto hochwertiger sind sie.

    Das Schmieden ist eine Kunst; Das Schreiben auch ;)

  8. #8
    merTii merTii ist offline Mitglied Silber
    Registriert seit
    Dec 2010
    Beiträge
    69
    Aus Gründen der Übersicht poste ich nur mal den Teil für meinen Button:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    private JButton getBtRegistrieren() {
            if (btRegistrieren == null) {
                btRegistrieren = new JButton();
                btRegistrieren.setBounds(new Rectangle(267,352, 158,37));
                btRegistrieren.setText("Registrieren");
                btRegistrieren.addActionListener(new java.awt.event.ActionListener() {
                    
                    public void actionPerformed(java.awt.event.ActionEvent e) {
                        System.out.println("actionPerformed()");
                        ;
                        
                    }

    Falls es mehr nötig ist, kann ich auch mehr posten...
    Ich denke wichtig ist " setVisible(true)"...die Frage ist nur wo ich dies Einfügen muss?
     

  9. #9
    Avatar von Akeshihiro
    Akeshihiro Akeshihiro ist offline Mitglied Platin
    Registriert seit
    Aug 2008
    Ort
    Kirchlengern (NRW)
    Beiträge
    647
    das setVisible() kannste bei Komponenten weglassen, die sind üblicherweise sichtbar, sobald man sie hinzufügt. Die Frage ist eher wie und wann du deine Buttons hinzufügst.
     
    Man sagt, das Schwert eines Samurai sei seine Seele ...

    Mit den Beiträgen ist es wie mit Schwertern: Je besser die Rohstoffe sind und je öfter man diese bearbeitet, desto hochwertiger sind sie.

    Das Schmieden ist eine Kunst; Das Schreiben auch ;)

  10. #10
    merTii merTii ist offline Mitglied Silber
    Registriert seit
    Dec 2010
    Beiträge
    69
    Okay, dann poste ich mal meine gesamte Klasse:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    
    package paket1;
     
    import javax.swing.SwingUtilities;
    import java.awt.BorderLayout;
    import java.awt.Image;
    import java.awt.Toolkit;
     
    import javax.swing.ImageIcon;
    import javax.swing.JPanel;
    import javax.swing.JFrame;
    import java.awt.Dimension;
    import javax.swing.JLabel;
    import java.awt.Rectangle;
    import javax.swing.JButton;
    import java.awt.Point;
     
    public class Hauptfenster extends JFrame {
     
        private static final long serialVersionUID = 1L;
        private JPanel jContentPane = null;
        private JLabel btBild = null;
        private JButton btAnmelden = null;  
        private JButton btRegistrieren = null;
     
        /**
         * This method initializes btAnmelden   
         *  
         * @return javax.swing.JButton  
         */
        private JButton getBtAnmelden() {
            if (btAnmelden == null) {
                btAnmelden = new JButton();
                btAnmelden.setBounds(new Rectangle(267, 296, 158, 37));
                btAnmelden.setText("Anmelden");
                btAnmelden.addActionListener(new java.awt.event.ActionListener() {
                    
                    public void actionPerformed(java.awt.event.ActionEvent e) {
                        System.out.println("actionPerformed()"); 
                        // TODO Auto-generated Event stub actionPerformed()
                    }
                });
            }
            return btAnmelden;
        }
     
        /**
         * This method initializes btRegistrieren   
         *  
         * @return javax.swing.JButton  
         */
        private JButton getBtRegistrieren() {
            if (btRegistrieren == null) {
                btRegistrieren = new JButton();
                btRegistrieren.setBounds(new Rectangle(267,352, 158,37));
                btRegistrieren.setText("Registrieren");
                btRegistrieren.addActionListener(new java.awt.event.ActionListener() {
                    
                    public void actionPerformed(java.awt.event.ActionEvent e) {
                        System.out.println("actionPerformed()");
                        ;
                        // TODO Auto-generated Event stub actionPerformed()
                    }
                });
            }
            return btRegistrieren;
        }
     
        /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    Hauptfenster thisClass = new Hauptfenster();
                    thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    thisClass.setVisible(true);
                }
            });
        }
     
        /**
         * This is the default constructor
         */
        public Hauptfenster() {
            super();
            initialize();
        }
     
        /**
         * This method initializes this
         * 
         * @return void
         */
        private void initialize() {
            this.setSize(699, 479);
            this.setContentPane(getJContentPane());
            this.setTitle("iSnow - Alle Skigebiete auf einen Blick");
        }
     
        /**
         * This method initializes jContentPane
         * 
         * @return javax.swing.JPanel
         */
        private JPanel getJContentPane() {
            if (jContentPane == null) {
                
                Image image = Toolkit.getDefaultToolkit().createImage("C:/Users/Efe/Documents/Mert/GFS/Background.jpg");
                btBild = new JLabel(new ImageIcon(image));
                btBild.setBounds(new Rectangle(2, 2, 699, 434));
                btBild.setText("JLabel");
                jContentPane = new JPanel();
                jContentPane.setLayout(null);
                jContentPane.add(btBild, null);
                jContentPane.add(getBtAnmelden(), null);
                jContentPane.add(getBtRegistrieren(), null);
            }
            return jContentPane;
        }
     
    }  //  @jve:decl-index=0:visual-constraint="10,10"
     

  11. #11
    Avatar von Akeshihiro
    Akeshihiro Akeshihiro ist offline Mitglied Platin
    Registriert seit
    Aug 2008
    Ort
    Kirchlengern (NRW)
    Beiträge
    647
    Tatsache, das sieht wirklich komisch aus. Aber du fügst deinen "Hintergrund" auch als Label ein, wahrscheinlich wird versucht diese auch ganz normal darzustellen. Ich würde den Hintergrund lieber wirklich im Hintergrund zeichnen (so wie ich das gemacht hab) anstatt es als Komponente einzufügen.
     
    Man sagt, das Schwert eines Samurai sei seine Seele ...

    Mit den Beiträgen ist es wie mit Schwertern: Je besser die Rohstoffe sind und je öfter man diese bearbeitet, desto hochwertiger sind sie.

    Das Schmieden ist eine Kunst; Das Schreiben auch ;)

  12. #12
    merTii merTii ist offline Mitglied Silber
    Registriert seit
    Dec 2010
    Beiträge
    69
    Okay ich versuchs so zu machen, wie du es auch gemacht hast...

    Kannst du mir sagen, mit welchem Tool du deine GUI erstellst...ich denk, du tippst ja wohl nicht alles einzelne.
     

  13. #13
    merTii merTii ist offline Mitglied Silber
    Registriert seit
    Dec 2010
    Beiträge
    69
    Aber gibt es vllt auch eine Lösung für meine Vorgehensweise?
     

  14. #14
    Avatar von Akeshihiro
    Akeshihiro Akeshihiro ist offline Mitglied Platin
    Registriert seit
    Aug 2008
    Ort
    Kirchlengern (NRW)
    Beiträge
    647
    Ich hab ne Möglichkeit gefunden, dein Problem zu lösen, aber meiner Meinung nach is das auch nich so der Hit ... Man kann nämlich den Z-Index bestimmen. Oder anders gesagt, man kann die Reihenfolge der Komponenten bestimmen, quasi als ob sie auf verschiedenen Ebenen liegen würden (so wie in Photoshop, falls das fürs Verständnis besser ist).
    Dazu änderst du in der Methode getJContentPane() einfach etwas ab. Und zwar
    Code java:
    1
    2
    3
    
    jContentPane.add(btBild, null);
    jContentPane.add(getBtAnmelden(), null);
    jContentPane.add(getBtRegistrieren(), null);
    gegen
    Code java:
    1
    2
    3
    
    jContentPane.add(btBild, 0);
    jContentPane.add(getBtAnmelden(), 0);
    jContentPane.add(getBtRegistrieren(), 0);
    Also einfach nur null gegen 0 ersetzen. Hier würde es schon reichen das nur beim getBtRegistrieren() zu machen, aber sicherheitshalber hab ich das bei den anderen Komponenten hinzugefügt.

    Also wenn ich mir den Code anschaue, dann nutzt die wohl Eclipse. Das nutze ich auch, aber ohne irgendwelche visuellen Editoren, wie z.B. VE. Am Anfang hab ich das noch gemacht, bis mir das Teil auf die Nerven ging, weil der Code immer aussah wie sonst was und seit dem tippe ich das alles von Hand. Son VE ist zwar ganz nett, vor allem wenn man was ändern will, aber man braucht ihn nicht. Abgesehn davon ordnest du damit ja nur paar Komponenten an, die Logik musst du ja dennoch selbst machen und dazu gehört auch das Zeichnen.
     
    Man sagt, das Schwert eines Samurai sei seine Seele ...

    Mit den Beiträgen ist es wie mit Schwertern: Je besser die Rohstoffe sind und je öfter man diese bearbeitet, desto hochwertiger sind sie.

    Das Schmieden ist eine Kunst; Das Schreiben auch ;)

  15. #15
    merTii merTii ist offline Mitglied Silber
    Registriert seit
    Dec 2010
    Beiträge
    69
    Okay super es funktioniert...danke! Ich find das als JLabel einen tick besser, weil die Qualität einfach besser ist.

    Jap benutze auch Eclipse, aber hab mir auch vorgenommen, viele Teile per Hand abzutippen, weil es ja mal vorkommen kann, dass kein Tool vorhanden ist, was mir alles vorsagt
     

Ähnliche Themen

  1. Bild als Hintergrund
    Von Sascha1122 im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 2
    Letzter Beitrag: 19.05.09, 17:51
  2. Bild als Hintergrund
    Von ivory-martin im Forum CSS
    Antworten: 2
    Letzter Beitrag: 22.10.07, 19:35
  3. Hintergrund Bild
    Von FlyingBall im Forum CSS
    Antworten: 3
    Letzter Beitrag: 09.07.07, 11:51
  4. Hintergrund bild
    Von ArneZ im Forum Cinema 4D
    Antworten: 2
    Letzter Beitrag: 07.12.06, 12:59
  5. Über ein Hintergrund Bild ein Bild legen
    Von Orphelina im Forum CSS
    Antworten: 21
    Letzter Beitrag: 31.03.05, 09:27