jscrollpane mit Bildern (swing)

hitomie

Grünschnabel
Hallo,
ich hoffe hier kann mir jemand helfen bin echt am verzweifeln :(

Ich hab eine jscrollpane gemancht. Leider schaffe ich es nicht Bilder und Text da rein zu tun,
die Bilder lassen sich dann nicht mit scrollen und liegen über den Text :(

Bin echt ein Anfänger und hab das mit netbeans gemacht.
eine Scrollpane gemacht, dann Textarea darüber und an denn stellen wo Bilder sind hab ich ein lable gemacht.

Ich hoffe jemand kann mir sagen was ich falsch mache und wie ich es richtig machen.
Oder mir ein passendes Beispiel zeigen kann.

Danke
liebe Grüße
 
Hallo hitomie,

wenn du ein wenig Code posten könntest, fällt das Fehlerfinden vermutlich etwas leichter :)


Grüße
Carron
 
PHP:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * anleitung2.java
 *
 * Created on 10.06.2010, 20:42:32
 */

package gui;

/**
 *
 * @author me
 */
public class anleitung2 extends javax.swing.JFrame {

    /** Creates new form anleitung2 */
    public anleitung2() {
        initComponents();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        jLabel2 = new javax.swing.JLabel();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTextArea1 = new javax.swing.JTextArea();
        jLabel1 = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        getContentPane().setLayout(null);

        jLabel2.setIcon(new javax.swing.ImageIcon("C:\\Users\\me\\Documents\\NetBeansProjects\\gui\\src\\gui\\form.jpg")); // NOI18N
        getContentPane().add(jLabel2);
        jLabel2.setBounds(100, 240, 290, 90);

        jTextArea1.setColumns(20);
        jTextArea1.setRows(5);
        jTextArea1.setText("Das ist ein Test zum Test\n1\n2\n2\n3\n3\n4\n5\n5\n6\n\n\n\n\n\n\n\nund hier gehts weiter ");
        jScrollPane1.setViewportView(jTextArea1);

        getContentPane().add(jScrollPane1);
        jScrollPane1.setBounds(80, 100, 330, 270);

        jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/gui/anleitung.jpg"))); // NOI18N
        getContentPane().add(jLabel1);
        jLabel1.setBounds(-60, 0, 624, 457);

        pack();
    }// </editor-fold>

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new anleitung2().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTextArea jTextArea1;
    // End of variables declaration

}


So das ist mein Java code wie gesagt, hab das mit netbeans gemacht , (das heißt nix selber geschrieben ^^). Hoffe du kannst mir helfen.
 
Hi hitomie,

da du vermutlich vorerst weiter mit Netbeans deine GUI zusammenklicken wirst, werde ich vermeiden dir modifizierten Code zu geben, mit dem der Netbeans-GUI-Builder nichts anfangen kann.

Also nur ein paar Hinweise:
  • für alle deine Komponenten wird getContentPane().add(...); aufgerufen. Wenn du möchtest, das deine Labels bzw. deine TextArea in der JScrollPane mitbewegt werden, müssen diese der JScrollPane untergeordnet werden (z.B. jScrollPane1.add(jTextArea1)) etc.)
  • um eine dynamische GUI zu erhalten, lohnt es sich einen Blick in die gegebenen LayoutManager zu verwerfen (siehe z.B. hier), der GUI-Builder nutzt nämlich leider das NULL-Layout (getContentPane().setLayout(null)), bei dem pixelgenau die Position und Größe der einzelnen Komponenten festgelegt wird (unpraktisch wenn sich die Fenstergröße mal verändert, oder man einfach nur die GUI von Hand erweitert...)
  • Grundsätzlich bin ich ein Verfechter von handgeschriebene GUIs, weil der ausufernde Code von GUI-Buildern für meine Begriffe zu umständlich ist. Aber das ist nur eine persönliche Vorliebe und um den Umgang mit GUI-Komponenten zu lernen, ist ein solche Editor manchmal durchaus hilfreich...

Gute Nacht und Grüße
Carron
 
Erstmal vielen vielen Dank für deine Antwort, aber gegen einen modifizierten Code hätte ich nix ^^ könnt ich dann doch über eclipse oder so sehe oder?


Werd auf jedenfall mal versuchen das unterzuordnen...hatte das vorher schonmal versucht nur leider konnte man es dann gar nicht mehr sehen weil es darunter war....

ohman das macht mich alles fertig...:D
 
Hallo,

soweit ich das verstanden habe ist dein "anleitung.jpg" als Hintergrundbild gedacht. Dafür habe ich aus einem anderen Beitrag hier im Forum den Code übernommen konnte ihn aber nicht auf die Schnelle testen.
Der Rest hat meines Erachtens funktioniert. Leider konnte ich dem NULL-Layout nicht deinen genauen GUI-Aufbau entnehmen (deswegen mag ich es auch nicht :p )

Java:
package gui;
 
import java.awt.Graphics;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
 
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.WindowConstants;
 
public final class Anleitung extends JFrame {
    
    // Das Hintergrundbild
    final ImageIcon background;
 
    /**
     * Konstruktor legt das Fenster mit dem gegebenen Titel an.
     * 
     * @param title
     *            zu setzender Titeltext
     */
    public Anleitung(final String title) {
        // Super-Konstruktor (JFrame) aufrufen
        super(title);
        // Schliessen des Fenster soll die Anwendung beenden
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        // Hintergrundbild hinterlegen
        this.background = new ImageIcon(getClass().getResource(
            "/gui/anleitung.jpg"));

        // Inhaltsbereich mit Hintergrundbild initialisieren
        setContentPane(new JPanel(new GridBagLayout()) {
            @Override
            protected void paintComponent(final Graphics graphics) {
                // normales Zeichnen bestehen lassen
                super.paintComponent(graphics);
                // Hintergrundbild einsetzen (obere linke Ecke)
                graphics.drawImage(Anleitung.this.background.getImage(), 0, 0,
                        this);
            }
        });
        // Komponenten in der contentArea anlegen
        initComponents();
        // Fenster auf bevorzugte Groesse setzen
        pack();
    }
 
    /**
     * Legt die eigentlichen Komponenten im Inhaltsbereich an.
     */
    private void initComponents() {
        // ganz oben links das Label mit der "form.jpg" einsetzen
        getContentPane().add(new JLabel(new ImageIcon(getClass().getResource("/gui/form.jpg"))));
        // Eingabefeld anlegen
        final JTextArea textArea = new JTextArea();
        // Testtext einsetzen
        textArea.setText("Ein Testtext zum Testen des Textfeldes.\n"
                + "Und hier kommen die neuen Zeilen:"
                + "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" + "Und wieder Text...");
        // Eingabefeld scrollbar machen
        final JScrollPane scrollPane = new JScrollPane(textArea);
        // Layout-Informationen des Eingabefelds zusammenstellen
        final GridBagConstraints textAreaConstr = new GridBagConstraints();
        // Eingabefeld soll sich den ganzen Platz nehmen
        textAreaConstr.fill = GridBagConstraints.BOTH;
        // auch bei Groessenaenderungen: volle Breite
        textAreaConstr.weightx = 1;
        // auch bei Groessenaenderungen: volle Hoehe
        textAreaConstr.weighty = 1;
        // Grid-Position (0,1), auf (0,0) liegt ja das Label
        textAreaConstr.gridy = 1;
        // scrollbares Eingabefeld einsetzen
        getContentPane().add(scrollPane, textAreaConstr);
    }
}

Ich hoffe es hilft.

Viele Grüße
Carron
 
Zuletzt bearbeitet:
ohman ich heul gleich :(

Ich hab denn Code übernommen doch leider geht das nicht..es werden meine "anderen" fenster übernommen. Hab das in einer eigenen Package nochmal versucht und es hat wieder nicht geklappt...mache ich irgendwas falsch? was soll ich jetzt machen ?


Nochmals vielen Dank
 
N'Abend

Genau das meinte ich mit:
... werde ich vermeiden dir modifizierten Code zu geben, mit dem der Netbeans-GUI-Builder nichts anfangen kann.

Daher lieber den Kopf etwas in die LayoutManager bzw. allgemein die GUI-Programmierung stecken und sich dann genau das bauen, was du haben willst.
Da lernt man ne ganze Menge, was auch für das übrige Programmieren außerhalb der GUI hilfreich ist, und nachvollziehbaren (vermutlich sauberen Code). Sollten dabei Probleme auftreten, die nicht mittels Forums- bzw. allgemeiner Internetsuche zu bewältigen sind, dann triffst du hier immer auf offene Ohren.

Testhalber kannst du ja in die von mir schon vorgeschlagene Anleitung-Klasse noch eine main()-Methode einbauen um das Ganze mal zu testen.

Java:
public static void main(String[] args) {
    new Anleitung("Anleitung - Fenster").setVisible(true);
}

Wie gesagt: mit auskommentierten Bildern hat das bei mir so funktioniert.

Vielleicht nimmst du das als Ansatzpunkt und baust dir dann deine GUI von Hand.


Alternativ müsste sich jemand zu Wort melden, der mehr Ahnung vom Netbeans-GUI-Builder hat um dir da zu helfen, denn ich weiß nur dass es ihn gibt und habe ihn selbst nie eingesetzt.


Grüße & Gute Nacht
Carron

EDIT: dass das in einem anderen Package nicht funktioniert hat, kann daran liegen, dass er dann keinen Zugriff mehr auf die hinterlegten Bilder hat. Dann müsstest du allerdings eine NullPointerException aus einem der beiden new ImageIcon()-Aufrufe bekommen.
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück