Avatar billede firehat Nybegynder
12. oktober 2004 - 20:31 Der er 21 kommentarer og
2 løsninger

Scroolbars på JList og JEditorPane

Hey,

Jeg har kikket lidt rundt her på eksperten og søgt på google om hvordan man laver scroolbars, men kan ikke finde ud af det..

Er der nogen som kan forklare mig hvordan man laver scroolbars til en JList og en JEditorPane? Gerne med kode eksempel :)

Mvh
Firehat
Avatar billede mikkelbm Nybegynder
12. oktober 2004 - 20:39 #1
Det er faktisk uhyre simpelt :)

Du laver din kode som sædvanligvis, og istedet for at adde din list og editorpane til et panel (eller hvad det nu er) adder du dem til en JScrollPane. Og adder derefter dine scrollpanes til panelet, framen etc...

køreklart eksempel:


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

public class Test extends JFrame
{   
    public Test()
    {
        setSize(400, 400);
       
        DefaultListModel listModel = new DefaultListModel();
        JList list = new JList(listModel);
       
        for (int i = 0; i<50; i++)
            listModel.addElement("Test " + i);
           
        JEditorPane pane = new JEditorPane();
        pane.setText("Bla bla bla");
       
        getContentPane().add(new JScrollPane(list), BorderLayout.NORTH);
        getContentPane().add(new JScrollPane(pane), BorderLayout.CENTER);
    }
   
    public static void main(String[] args)
    {
        new Test().setVisible(true);
    }

}
Avatar billede mikkelbm Nybegynder
12. oktober 2004 - 20:41 #2
Avatar billede firehat Nybegynder
12. oktober 2004 - 20:45 #3
hmm...hvad er der galt her?


  public static JEditorPane txtMailText = new JEditorPane();

..

    txtMailText.setContentType("text/plain");
    txtMailText.setBounds(new Rectangle(288, 9, 303, 259));
   
..

    getContentPane().add(new JScrollPane(txtMailText));
    contentPane.add(txtMailText, null);
Avatar billede firehat Nybegynder
12. oktober 2004 - 20:48 #4
hmm....har lige prøvet med:


  public static JEditorPane txtMailText = new JEditorPane();
  JScrollBar scrollMailText = new JScrollBar();

..

    txtMailText.setContentType("text/plain");
    txtMailText.setBounds(new Rectangle(288, 9, 303, 259));

    scrollMailText.setBounds(new Rectangle(595, 9, 15, 259));
   
..

    getContentPane().add(scrollMailText);
    contentPane.add(txtMailText, null);


burde det ikke virke?
Avatar billede mikkelbm Nybegynder
12. oktober 2004 - 20:50 #5
Du skal bruge JScrollPane og ikke JScrollBar
Avatar billede mikkelbm Nybegynder
12. oktober 2004 - 20:53 #6
og hvad sker der her?

getContentPane().add(scrollMailText);
contentPane.add(txtMailText, null);

Hvis du har en reference til contentPane skal du bare adde scrollpane og ikke dit txtMailText til den.

altså - du kan nøjes med:
contentPane.add(scrollMailText, null);
Avatar billede firehat Nybegynder
12. oktober 2004 - 21:01 #7
hmm...roder lidt rundt i det..

    public static JEditorPane txtMailText = new JEditorPane();
    JScrollPane scrollMailText = new JScrollPane();

..

    txtMailText.setContentType("text/plain");
    txtMailText.setBounds(new Rectangle(288, 9, 303, 259));

    scrollMailText.setBounds(new Rectangle(595, 9, 15, 259));


    contentPane.add(txtMailText, null);
    contentPane.add(scrollMailText, null);


har jeg nu. Skal teksten tilføjes før jeg laver noget med scrollbaren?
Avatar billede _carsten Nybegynder
12. oktober 2004 - 22:23 #8
Gør som mikkel har vist, så ruller det


                  public static JEditorPane txtMailText = new JEditorPane();
RET EVENTUELT:    JScrollPane scrollMailText = new JScrollPane();
          TIL:  JScrollPane scrollMailText = new JScrollPane( txtMailText );

                  txtMailText.setContentType("text/plain");

                  // Slet nedenstående, den skal du ikke bruge, dit editorpane
                  // skal formentlig fylde hele dit scrollpane, hverken mere
                  // eller mindre
                  txtMailText.setBounds(new Rectangle(288, 9, 303, 259));


                  // Her er dit scrollpane kun 15 pixel bredt (meget smalt)
                  scrollMailText.setBounds(new Rectangle(595, 9, 15, 259));

                  // SÅDAN ("null" er som jeg lige ser det unødvendig)
                  contentPane.add( scrollMailText );
Avatar billede firehat Nybegynder
12. oktober 2004 - 22:36 #9
hmm...hvis jeg gør det kommer der bare en ramme og ikke andet, og der sker ikke noget når jeg senere tilføjer en tekst ?
Avatar billede _carsten Nybegynder
12. oktober 2004 - 22:38 #10
Sandsynligvis fordi dit scrollpane er så smalt at det ikke kan ses

Prøv at rette:  scrollMailText.setBounds(new Rectangle(595, 9, 15, 259));
til;            scrollMailText.setBounds(new Rectangle(595, 9, 150, 259));
Avatar billede firehat Nybegynder
12. oktober 2004 - 22:41 #11
hjælper ikke..
Avatar billede _carsten Nybegynder
12. oktober 2004 - 22:43 #12
Så er der noget andet galt, vi skal se mere kode for at kunne hjælpe
Avatar billede firehat Nybegynder
12. oktober 2004 - 22:45 #13
Avatar billede firehat Nybegynder
12. oktober 2004 - 22:53 #14
er det nok?
Avatar billede _carsten Nybegynder
12. oktober 2004 - 23:02 #15
Ja det tror jeg
Avatar billede _carsten Nybegynder
12. oktober 2004 - 23:29 #16
I guder - den var jeg længe om at finde

    getContentPane().add(lblPOP3, null);
    getContentPane().add(lblMail, null);
    getContentPane().add(lblPassword, null);
    getContentPane().add(txtPOP3, null);
    getContentPane().add(txtMail, null);
    getContentPane().add(txtPassword, null);
    getContentPane().add(cmdLogin, null);
    getContentPane().add(lstMails, null);
    getContentPane().add(txtMailText); // HER ER FEJLEN, DENNE LINIE SKAL FJERNES
    getContentPane().add(cmdRead, null);
    getContentPane().add(scrollMailText);
Avatar billede _carsten Nybegynder
12. oktober 2004 - 23:46 #17
Sorry - jeg har bokset så meget rundt med din kode, at jeg fik vist dig min udgave

Sådan skal DIN udgave se ud.

    contentPane.add(lblPOP3, null);
    contentPane.add(lblMail, null);
    contentPane.add(lblPassword, null);
    contentPane.add(txtPOP3, null);
    contentPane.add(txtMail, null);
    contentPane.add(txtPassword, null);
    contentPane.add(cmdLogin, null);
    contentPane.add(lstMails, null);
    contentPane.add(cmdRead, null);
    contentPane.add(scrollMailText);

    getContentPane().add( contentPane );

I morgen vil jeg fortælle dig hvorfor - gider ikke mere idag.
Avatar billede firehat Nybegynder
13. oktober 2004 - 11:57 #18
Det virker jo perfekt :D Tak skal du have - prøver lige at lave det på min JList før jeg lukker :)
Avatar billede firehat Nybegynder
13. oktober 2004 - 12:18 #19
Så virker den anden også, men når jeg køre programmet skriver den dette:
java.lang.IllegalArgumentException: adding container's parent to itself

    at java.awt.Container.addImpl(Container.java:611)

    at java.awt.Container.add(Container.java:307)

    at getmail.frmGetMail.jbInit(frmGetMail.java:115)

    at getmail.frmGetMail.<init>(frmGetMail.java:39)

    at getmail.appGetMail.<init>(appGetMail.java:20)

    at getmail.appGetMail.main(appGetMail.java:50)


Men åbner aligevel programmet som virker fint?
Avatar billede _carsten Nybegynder
13. oktober 2004 - 19:19 #20
Undskyld det tog lidt tid, men det arbejde tager sommetider for meget af ens fritid.

Den er ikke helt perfekt, du har en lille bøf her

          JPanel contentPane;
          contentPane = (JPanel) this.getContentPane();

En JFrames contentpane er en Container, derfor skal du lige rette til

    Container contentPane = this.getContentPane();  og derefter contentPane.add(....

Det betyder at du ender med at få noget der ser sådan ud


    Container contentPane = this.getContentPane();

    contentPane.add(lblPOP3, null);
    contentPane.add(lblMail, null);
    contentPane.add(lblPassword, null);
    contentPane.add(txtPOP3, null);
    contentPane.add(txtMail, null);
    contentPane.add(txtPassword, null);
    contentPane.add(cmdLogin, null);
    contentPane.add(lstMails, null);
    contentPane.add(cmdRead, null);
    contentPane.add(scrollMailText);
    // SLUT

Den skulle gerne være fejlfri
Avatar billede firehat Nybegynder
16. oktober 2004 - 16:01 #21
Så virker det :)

Kan jeg fjerne den vandrette scrollbar?
Avatar billede mikkelbm Nybegynder
16. oktober 2004 - 18:46 #22
JScrollPane har en metode (læs: http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/JScrollPane.html#setHorizontalScrollBarPolicy(int)):

setHorizontalScrollBarPolicy(int policy)

Og følgende atributter:

JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER
JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS

Så noget a la:

scrollMailText.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER)
Avatar billede firehat Nybegynder
17. oktober 2004 - 10:32 #23
mikkelbm > jammen det virker jo ;)

1000 Tak for hjælpen til jer begge to :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester