-
15-12-2009, 19:45 #1Member
- Registered
- 06/04/05
- Location
- Space
- Posts
- 4,282
- iTrader
- 31 (100%)
- Mentioned
- 3 Post(s)
- Reputation
- 0/94
Java, JLabel genereren in nieuw venster
Hallo,
Ik heb dus een hoofdvenster met een tabel, en met een knop.
Als ik op die knop druk opent er een nieuw venster en daarin zou ik wat JLabels willen laten genereren.
Nu had ik deze code in de constructor van het nieuw venster gestoken.
Nu geeft hij de kader wel mooi weer, maar niet mijn JLabel?Code:public Toevoegen() { initComponents(); add(new JLabel("test", JLabel.LEFT)); }no votes
-
-
15-12-2009, 20:31 #2Approved 9liver
- Registered
- 18/01/04
- Location
- Melle
- Posts
- 10,535
- iTrader
- 56 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 27/102
Je moet nog een layoutmanager toevoegen volgens mij
“In terms of how we evaluate schooling, everything is about working by yourself. If you work with someone else, it’s called cheating. Once you get out in the real world, everything you do involves working with other people.”
PSN: Cycloon - Final Fantasy XIV: A realm reborn characterno votes
-
15-12-2009, 21:00 #3Member
- Registered
- 06/04/05
- Location
- Space
- Posts
- 4,282
- iTrader
- 31 (100%)
- Mentioned
- 3 Post(s)
- Reputation
- 0/94
Container c = p.getContentPane();
c.setLayout(new FlowLayout());
Zoiets?
Zoja, ook al geprobeert werkt niet , toch bedanktno votes
-
15-12-2009, 21:08 #4Approved 9liver
- Registered
- 10/11/03
- Location
- Gent
- Posts
- 6,158
- iTrader
- 41 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 1/121
Een Component moet je normaal toevoegen aan een JPanel, en dat paneel dan als contentPane zetten van het venster waarin ge werkt.
Enfin, dat is toch een mooiere manier van werken.
Dit stukje code werkt:Code:public static void main(String[] args) { JFrame frame = new JFrame("Test"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(400, 300); frame.add(new JLabel("test")); frame.setVisible(true); }no votes
-
15-12-2009, 21:19 #5Approved 9liver
- Registered
- 18/01/04
- Location
- Melle
- Posts
- 10,535
- iTrader
- 56 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 27/102
“In terms of how we evaluate schooling, everything is about working by yourself. If you work with someone else, it’s called cheating. Once you get out in the real world, everything you do involves working with other people.”
PSN: Cycloon - Final Fantasy XIV: A realm reborn characterno votes
-
15-12-2009, 21:21 #6Approved 9liver
- Registered
- 10/11/03
- Location
- Gent
- Posts
- 6,158
- iTrader
- 41 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 1/121
Dit zal zoals in jouw voorbeeld, niet werken. Maar voeg in de de actionPerformed() methode deze regel toe:Code:public static void main(String[] args) { final JFrame frame = new JFrame("Test"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(400, 300); frame.setVisible(true); frame.setLayout(new FlowLayout()); JButton button = new JButton("klik"); button.setAction(new AbstractAction() { public void actionPerformed(ActionEvent e) { frame.add(new JLabel("test")); } }); button.setMaximumSize(new Dimension(20,20)); frame.add(button); }en voila, bij het klikken op de knop zullen de extra labels verschijnenCode:frame.validate();
De API zegt van deze methode:Maar ik denk nog aan iets. Werkt je code niet als je in de constructor Toevoegen() als eerste lijn zet:public void validate()
Validates this container and all of its subcomponents.
The validate method is used to cause a container to lay out its subcomponents again. It should be invoked when this container's subcomponents are modified (added to or removed from the container, or layout-related information changed) after the container has been displayed.
If this Container is not valid, this method invokes the validateTree method and marks this Container as valid. Otherwise, no action is performed.?Code:super();
no votes
-
15-12-2009, 23:11 #7Member
- Registered
- 20/09/04
- Location
- Kortrijk / Gent
- Posts
- 7,177
- iTrader
- 1 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 3/43
is de grootte van uw tweede frame gezet?
Maw, roep je NA het add'en van die labels de methode frame2.pack() op?
@Timmos: wanneer het om een nieuw venster gaat met voorgedefinieerde componenten zou je de validate() methode niet nodig moeten hebben.no votes
-
16-12-2009, 15:32 #8Member
- Registered
- 06/04/05
- Location
- Space
- Posts
- 4,282
- iTrader
- 31 (100%)
- Mentioned
- 3 Post(s)
- Reputation
- 0/94
Ik krijg het niet werkende, maar het rare is, als ik da een filetje laat uitvoeren, maakt hij mijn tabel aan, en maakt hij mijn jlabels aan(die de colomnamenzijn van die tabel).
Alles werkt perfect.
Maar als ik dan in een ander frame een knopje maak naar dat frame, genereert hij mijn tabel wel ng maar niet meer mijn labels.
Indien iemand mij ff kan helpen via msn ofzo , of iemand die dat wil mag me altijd zijn hotmail adres PM'n.
Alvast bedanktno votes
-
16-12-2009, 15:54 #9Approved 9liver
- Registered
- 18/01/04
- Location
- Melle
- Posts
- 10,535
- iTrader
- 56 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 27/102
Post je code hier eens ofzo?
“In terms of how we evaluate schooling, everything is about working by yourself. If you work with someone else, it’s called cheating. Once you get out in the real world, everything you do involves working with other people.”
PSN: Cycloon - Final Fantasy XIV: A realm reborn characterno votes
-
16-12-2009, 16:13 #10Member
- Registered
- 06/04/05
- Location
- Space
- Posts
- 4,282
- iTrader
- 31 (100%)
- Mentioned
- 3 Post(s)
- Reputation
- 0/94
Code:/* * To change this template, choose Tools | Templates * and open the template in the editor. */ /* * panel.java * * Created on 14-dec-2009, 17:51:07 */ package main22; import java.awt.Container; import java.awt.FlowLayout; import java.sql.*; import java.util.Vector; import javax.swing.JLabel; import javax.swing.JOptionPane; /** * * @author */ public class panel extends javax.swing.JFrame { /** Creates new form panel */ public panel() { super(); initComponents(); Vector data = new Vector(); Vector row; Vector columns = new Vector(); try { ResultSet rs = createSelect("werknemer"); ResultSetMetaData md = rs.getMetaData(); int columnCount = md.getColumnCount(); columns = new Vector(columnCount); //store column names for (int i = 1; i <= columnCount; i++) { columns.add(md.getColumnName(i)); add(new JLabel(md.getColumnName(i), JLabel.LEFT)); } //store row data while (rs.next()) { row = new Vector(columnCount); for (int i = 1; i <= columnCount; i++) { row.add(rs.getString(i)); } data.add(row); } } catch (Exception e) { e.printStackTrace(); JOptionPane.showMessageDialog(null, "Error, " + e.getMessage(), null, JOptionPane.ERROR_MESSAGE); } tabel.setModel(new javax.swing.table.DefaultTableModel(data, columns)); } private static Connection con = null; private static Statement stmt = null; public static Connection Getconn() { } public static ResultSet createSelect(String tabel) { ResultSet rs = null; try { stmt = Getconn().createStatement(); stmt.executeQuery("SELECT * FROM " + tabel + ";"); rs = stmt.getResultSet(); } catch (SQLException e) { throw new RuntimeException(e); } return rs; } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() { jScrollPane1 = new javax.swing.JScrollPane(); tabel = new javax.swing.JTable(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); setName("panel"); // NOI18N tabel.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { {null, null, null, null}, {null, null, null, null}, {null, null, null, null}, {null, null, null, null} }, new String [] { "Title 1", "Title 2", "Title 3", "Title 4" } )); jScrollPane1.setViewportView(tabel); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGap(52, 52, 52) .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(253, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGap(29, 29, 29) .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 93, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(494, Short.MAX_VALUE)) ); getAccessibleContext().setAccessibleName("panel"); pack(); }// </editor-fold> /** * @param args the command line arguments */ public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { panel p = new panel(); p.setVisible(true); Container c = p.getContentPane(); c.setLayout(new FlowLayout()); } }); } // Variables declaration - do not modify private javax.swing.JScrollPane jScrollPane1; private javax.swing.JTable tabel; // End of variables declaration }
juist de code van de connectie heb ik weg gedaan, maar alles werkt hierin, labes worden gegenereerd, tabel wordt gevuld.
Maar als ik dit frame laat oproepen door een ander worden mijn labels niet meer gegenereerd, mijn tabel wordt wel nog gevuld!no votes
-
16-12-2009, 17:11 #11Approved 9liver
- Registered
- 17/01/05
- Location
- Dilbeek
- Posts
- 1,954
- iTrader
- 48 (93%)
- Mentioned
- 2 Post(s)
Eerst en vooral, de volgende code lijkt mij nogal raar opgebouwd:
Ik kan erover kijken, maar ik zie niet meteen waar je je labels genereert in je code. Meh, imo is netbeans code toch vrij onoverzichtelijkCode:public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { panel p = new panel(); p.setVisible(true); Container c = p.getContentPane(); c.setLayout(new FlowLayout()); } });
no votes
-
16-12-2009, 17:30 #12Member
- Registered
- 06/04/05
- Location
- Space
- Posts
- 4,282
- iTrader
- 31 (100%)
- Mentioned
- 3 Post(s)
- Reputation
- 0/94
Staat int rood waar ik labels genereer in constructor, en da stukje code da jij daar quote is zo maar wa code om te testen, voor het zeker te kunnen laten genereren.
Dat zijn oplossingen die ik online gevonden hebt, en getest heb.no votes
-
16-12-2009, 17:39 #13Approved 9liver
- Registered
- 17/01/05
- Location
- Dilbeek
- Posts
- 1,954
- iTrader
- 48 (93%)
- Mentioned
- 2 Post(s)
Overgekeken dus, sorry

Je sluit je for loop niet af hier.Code://store column names for (int i = 1; i <= columnCount; i++) { columns.add(md.getColumnName(i)); add(new JLabel(md.getColumnName(i), JLabel.LEFT));
Gebruik hier eens het AbstractTableModel(...) voor je andere probleem in het andere topic. Meer informatie daarover staat bij de link welke ik daar gepost heb.Code:tabel.setModel(new javax.swing.table.DefaultTableModel(data, columns));
je sluit je for-loop hier niet af?
no votes
-
16-12-2009, 17:49 #14Member
- Registered
- 20/09/04
- Location
- Kortrijk / Gent
- Posts
- 7,177
- iTrader
- 1 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 3/43
Zijn accolade staat verder naar rechts.
Dus die wordt afgesloten.
Wanneer ik het run met fixed text, dan zie ik een JLabel.
Code is wel extreem onleesbaar.
Vervang eens de regel door:
add(new JLabel("test"+i, JLabel.LEFT));
Mss is de naam die je terugkrijgt gewoon leeg.
Wat is de bedoeling trouwens?
Om JLabels te gebruiken voor de Header van uw tabel?
Want dat is ingebouwde functionaliteit bij een JTable en daarvoor moet je geen JLabels gaan gebruiken.
Wat opmerkingen trouwens (want uw code is echt slecht leesbaar):
1. Noem uw klasse geen panel wanneer het een frame is
2. Waarom werk je met threads in uw main methode?
Doe gewoon het volgende in uw main:
3. Zet uw private klasse variabelen bovenaanCode:public static void main(String args[]) { panel p = new panel(); p.pack(); p.setVisible(true); }
4. Zet uw layout van uw frame wanneer ge uw frame aanmaakt en voor je componenten toevoegt
5. Zet uw pack emthide net voor .visible()
6. Je hebt geen default close value voor het sluiten van uw vensterno votes
-
16-12-2009, 18:41 #15Member
- Registered
- 06/04/05
- Location
- Space
- Posts
- 4,282
- iTrader
- 31 (100%)
- Mentioned
- 3 Post(s)
- Reputation
- 0/94
Neenh de code die ik gerbuik is volledig werkend.
Wat de code doet.
Vult Jtabel in met juiste waarden en hij maakt onder de JTabel, Verschillende labels aan met in die labels de column headers dus bv 8 headers dan maakt hij 8 labels aan.
Hij doet dit perfect zonder problemen.
Maar als ik dit Frame dan link aan een ander door middel van knop ofzo, dan genereert hij die tabel wel nog maar de labels niet meer.no votes


