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
Annonceindlæg tema
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); } }
12. oktober 2004 - 20:41
#2
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);
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?
12. oktober 2004 - 20:50
#5
Du skal bruge JScrollPane og ikke JScrollBar
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);
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?
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 );
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 ?
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));
12. oktober 2004 - 22:41
#11
hjælper ikke..
12. oktober 2004 - 22:43
#12
Så er der noget andet galt, vi skal se mere kode for at kunne hjælpe
12. oktober 2004 - 22:45
#13
12. oktober 2004 - 22:53
#14
er det nok?
12. oktober 2004 - 23:02
#15
Ja det tror jeg
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);
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.
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 :)
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?
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
16. oktober 2004 - 16:01
#21
Så virker det :) Kan jeg fjerne den vandrette scrollbar?
17. oktober 2004 - 10:32
#23
mikkelbm > jammen det virker jo ;) 1000 Tak for hjælpen til jer begge to :)
Kurser inden for grundlæggende programmering