Je cette classe, ce qui devrait ajouter un JLabel à un JPanel, mais pour une raison quelconque, il ne le fait pas. Pourquoi ne pas ajouter le JLabel au JPanel? Cela se passe dans ma classe SwigWorker
dans la méthode done()
JLabel pas ajouté à JPanel
package sscce;
import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.ArrayList;
import javax.swing.JLabel;
import javax.swing.SwingWorker;
import javax.swing.UIManager;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.CharacterData;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
public class sscce extends javax.swing.JFrame{
protected XML xml = new XML();
public sscce(){
initComponents();
GetNotes getNotes = new GetNotes();
getNotes.execute();
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jScrollPane1 = new javax.swing.JScrollPane();
notesPanel = new javax.swing.JPanel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
javax.swing.GroupLayout notesPanelLayout = new javax.swing.GroupLayout(notesPanel);
notesPanel.setLayout(notesPanelLayout);
notesPanelLayout.setHorizontalGroup(
notesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 494, Short.MAX_VALUE)
);
notesPanelLayout.setVerticalGroup(
notesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 433, Short.MAX_VALUE)
);
jScrollPane1.setViewportView(notesPanel);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 496, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 435, Short.MAX_VALUE)
);
pack();
}// </editor-fold>
public static void main(String args[]){
try{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}catch( ClassNotFoundException | InstantiationException | IllegalAccessException | javax.swing.UnsupportedLookAndFeelException ex){
java.util.logging.Logger.getLogger(sscce.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
java.awt.EventQueue.invokeLater(new Runnable(){
public void run(){
new sscce().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JPanel notesPanel;
// End of variables declaration
public class GetNotes extends SwingWorker{
protected ArrayList<XML> notes;
@Override
public void done(){
System.out.println(notes.size());
for(XML note : notes){
String n = note.getNode("notes", "note");
System.out.println(n);
JLabel lbl = new JLabel(n);
lbl.setVisible(true);
notesPanel.add(lbl);
}
}
@Override
public String doInBackground(){
String xmlStr = "<?xml version=\"1.0\"?>"
+ "<root>"
+ " <success>true</success>"
+ " <notes>"
+ " <note>Note 1</note>"
+ " </notes>"
+ " <notes>"
+ " <note>Note 2</note>"
+ " </notes>"
+ " <notes>"
+ " <note>Note 3</note>"
+ " </notes>"
+ "</root>";
xml.parse(xmlStr);
notes = xml.getNodes("root", "notes");
return null;
}
}
}
class XML{
private Document doc;
public XML(){
}
public void parse(String xml){
try{
DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
InputSource is = new InputSource();
is.setCharacterStream(new StringReader(xml));
doc = db.parse(is);
}catch(ParserConfigurationException | SAXException | IOException ex){
//Logger.getLogger(XML.class.getName()).log(Level.SEVERE, null, ex);
}
}
public Document getDoc(){
return this.doc;
}
public ArrayList<XML> getNodes(String root, String name){
ArrayList<XML> elList = new ArrayList<>();
NodeList nodes = doc.getElementsByTagName(root);
for(int i = 0; i < nodes.getLength(); i++){
Element element = (Element)nodes.item(i);
NodeList nl = element.getElementsByTagName(name);
for(int c = 0; c < nl.getLength(); c++){
Element e = (Element)nl.item(c);
String xmlStr = this.nodeToString(e);
XML xml = new XML();
xml.parse(xmlStr);
elList.add(xml);
}
}
return elList;
}
private String nodeToString(Node node){
StringWriter sw = new StringWriter();
try{
Transformer t = TransformerFactory.newInstance().newTransformer();
t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
t.transform(new DOMSource(node), new StreamResult(sw));
}catch(TransformerException te){
System.out.println("nodeToString Transformer Exception");
}
return sw.toString();
}
public String getNode(String root, String name){
NodeList nodes = doc.getElementsByTagName(root);
for(int i = 0; i < nodes.getLength(); i++){
Element element = (Element)nodes.item(i);
NodeList n = element.getElementsByTagName(name);
Element e = (Element)n.item(0);
return getCharacterDataFromElement(e);
}
return "";
}
public static String getCharacterDataFromElement(Element e){
Node child = e.getFirstChild();
if(child instanceof CharacterData){
CharacterData cd = (CharacterData)child;
return cd.getData();
}
return "";
}
}
Commencez par changer le gestionnaire de mise en page pour le 'notesPanel' autre chose alors' GroupLayout' - ce gestionnaire de mise en page est vraiment pas destiné à être manipulé manuellement. – MadProgrammer
J'ai essayé: Gridbag, flow, box, et aucun d'eux n'a fonctionné. –
Voir ma réponse, aussi +1 pour un exemple de course, merci – MadProgrammer