30. januar 2005 - 19:30
Der er
7 kommentarer og 1 løsning
flere JLabel end der er plads til på skærmen
Hej eksperter Jeg er ved at lave et program hvor der vertikalt skal være flere JLabel's end der kan være på skærmen. Hvordan kan jeg lave dette?? Forslag: Et JPanel med Jscroolpane(?), men hvordan laver man så det? På forhånd tak
Annonceindlæg fra Computerworld it-jobbank
Mød 3.500+ it-talenter på IT-DAY 2026
Hos Computerworld it-jobbank er vi stolte af at fortsætte det gode partnerskab med folkene bag IT-DAY – efter vores mening Danmarks bedste karrieremesse for unge og erfarne it-kandidater.
30. januar 2005 - 19:38
#1
Prøv noget a la: JPanel p = new JPanel(); p.add(new JLabel("...")); ... p.add(new JLabel("...")); getContentPane().add(new JScrollPane(p));
30. januar 2005 - 19:38
#2
Du skal lige selv tilføje evt. argumenter til add p.g.a. layout managers.
30. januar 2005 - 19:43
#3
Køreklart eksempel import javax.swing.*; public class TestLabels extends javax.swing.JFrame { public TestLabels() { initComponents(); setSize(200,600); } private void initComponents() { jScrollPane1 = new javax.swing.JScrollPane(); manyLabels1 = new ManyLabels(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); jScrollPane1.setViewportView(manyLabels1); getContentPane().add(jScrollPane1, java.awt.BorderLayout.CENTER); pack(); } public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new TestLabels().setVisible(true); } }); } private javax.swing.JScrollPane jScrollPane1; private ManyLabels manyLabels1; } class ManyLabels extends javax.swing.JPanel { public ManyLabels() { initComponents(); } private void initComponents() { setLayout(new java.awt.GridLayout(100, 1)); for(int i = 0; i < 100; i++){ add(new JLabel("Label nr.: " + i)); } } }
30. januar 2005 - 22:02
#4
Perfekt eksempel Carsten - tak!! Jeg har lige et tillægsspørgsmål :-) Jeg har sat og forsøgt på at få JPanellet opdateret dynamisk med en knap. Jeg har tilføjet: ***** public void addLabel() { add(new JLabel("Label nr.: " + 101)); } ***** i ManyLabels-klassen og så en ActionLIstener til en knap: ***** class AddListener implements ActionListener //ved klik på Opret-knappen { public void actionPerformed(ActionEvent e) { manyLabels1.addLabel(); } } ***** ActionListener er tilføjet til knappen og jeg har forsøgt at fyre en "repaint" efter, men jeg kan ikke rigtig få det til at spille
30. januar 2005 - 22:17
#5
Det er fordi jeg bruger GridLayout, tilføj følgende metode til ManyLabels HUSK import java.awt.*; i ManyLabels !!!! public void addLabel(){ GridLayout lay = (GridLayout)getLayout(); int rows = lay.getRows(); lay.setRows(rows + 1); add(new JLabel("Label nr.: " + (rows + 1) )); validate(); } Herefter tilføjer du knappen i TestLabels, så TestLabels kommer til at se sådan ud: public class TestLabels extends javax.swing.JFrame { public TestLabels() { initComponents(); setSize(200,600); } private void initComponents() { jScrollPane1 = new javax.swing.JScrollPane(); manyLabels1 = new ManyLabels(); jButton1 = new javax.swing.JButton(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); jScrollPane1.setViewportView(manyLabels1); getContentPane().add(jScrollPane1, java.awt.BorderLayout.CENTER); jButton1.setText("Add new label to JPanel"); jButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { addLabel(evt); } }); getContentPane().add(jButton1, java.awt.BorderLayout.NORTH); pack(); } private void addLabel(java.awt.event.ActionEvent evt) { manyLabels1.addLabel(); } public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new TestLabels().setVisible(true); } }); } private javax.swing.JButton jButton1; private javax.swing.JScrollPane jScrollPane1; private ManyLabels manyLabels1; }
31. januar 2005 - 13:06
#6
Det virker fint, men hvorfor bliver der tilføjet ca. 10 nye "rækker" til gridlayoutet nogle gange. F.eks. den første gang man trykker på knappen? (ikke noget som jeg ikke kan leve med - blot nysgerrig :-))
31. januar 2005 - 14:28
#7
Der bliver kun tilføjet én række for hver gang knappen aktiveres. Skyldes min fejlplacering af validate() private void addLabel(java.awt.event.ActionEvent evt) { manyLabels1.addLabel(); validate(); // Her skal den være !! } Og fjern derefter validate() fra metoden addLabel i ManyLabels - den er unødvendig. Og et svar.
31. januar 2005 - 14:31
#8
perfekt :-) takker
Kurser inden for grundlæggende programmering