18. december 2003 - 16:28Der er
22 kommentarer og 1 løsning
JPanel vil ikke opdateres med nye data
Er der nogle, der kender til dette problem?
1) Jeg har et JPanel placeret i min frame, idette JPanel kommer en gruppe af checkboxes til syne, som er placeret i et GridLayout. Ved siden af disse checkboxes er der bare JLabels med text 2) Ved tryk på externe knap skiftes antal checkboxes og teksten skiftes også, men
anden gang det sker ser det ikke pænt ud. Når man hakker af i en checkbox, kommer de forrige data frem og man kan slet ikke hakke af i de nye checkboxes...
Min checkbox / JLabel klasse er bare en custom klase, der arver fra JPanel. Dette JPanel smides ind i en JScrollPane, der så tilføres hovedframen. Den ser således ud:
hvis du har nogle rendering problemer, så prøve med: Runnable updateAComponent = new Runnable() { public void run() { repaint(); } }; SwingUtilities.invokeLater(updateAComponent);
Ovenstående, altså efter du har lavet de ændringer du vil. Ved ik hvordan din update kommer, om det er fra en tråd du selv har lavet?
Ok bruger nu din klasse, Carsten. Det er godt det samme, de gamle værdier er stadig til syne. De gamle værdier er også stadig til syne, selvom jeg remover mit JPanel (dvs min custom klasse) og selvom jeg repainter() efter scrollpane er tilføjet panelet eller efter jeg tilfører repaint() som det sidste i min Custom klasse
Jeg kan ikke lige gennemskue hvad du gør, normalt virker det at remove og adde, men det du skal bruge, er et CardLayout - eneste rigtige løsningen på det jeg tror du sidder og tumler med. Nedenstående er et eksempel på CardLayout og BorderLayout, panelet i venstre side bruger et Cardlayout med 3 JPanel's i, højre side er bare ét JPanel, du skifter panelerne i venstre side med menuen.
Gem nedenstående fil som TestCardLayout, kompiler og kør.
public TestCardLayout() { initComponents(); setSize(500,500); }
private void initComponents(){ panelWest = new JPanel(); panelEast = new JPanel(); panel2 = new Panel2(); panel3 = new Panel3(); panel4 = new Panel4();
menuBar = new JMenuBar(); menu = new JMenu(); item2 = new JMenuItem(); item3 = new JMenuItem(); item4 = new JMenuItem();
Jeg skal opdatere et JPanel med et antal checkboxes og det samme antal JLabels for hver gang der trykkes på en ekstern knap. Jeg kender ikke antallet af gange dette sker. Det er for kompliceret at forklare, hvorfor jeg ikke kender antallet af gange det sker.
Prøv lige den her, det tager faktisk ikke lang tid at tilføje 1000 JCheckBox's Og så er vi nok der henne hvor jeg får svært ved at hjælpe dig yderligere
import javax.swing.*; import java.awt.*; public class JFrame_2 extends javax.swing.JFrame {
public JFrame_2() { initComponents(); setSize(500, 500); }
private void initComponents() { jPanel1 = new javax.swing.JPanel(); jButton1 = new javax.swing.JButton(); jPanel2 = new javax.swing.JPanel();
jButton1.setText("Tryk p\u00e5 knappen og skriv hvor mange der skal tilf\u00f8jes"); jButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { addBoxes(evt); } });
private void addBoxes(java.awt.event.ActionEvent evt) { String s = JOptionPane.showInputDialog(this, "Skriv antallet af CheckBoxes du vil have"); try{ int i = Integer.parseInt(s); checkBox = new JCheckBox[i]; nowAddBoxes(); } catch(NumberFormatException nf){ JOptionPane.showMessageDialog(this, "Du må kun skrive tal !!", "Besked", JOptionPane.ERROR_MESSAGE); } }
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.