Page 1 of 2 12 Last
  1. #1
    da_flux's Avatar
    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.
    Code:
            public Toevoegen() {
            initComponents();
    
       
            add(new JLabel("test", JLabel.LEFT));
       
    
        }
    Nu geeft hij de kader wel mooi weer, maar niet mijn JLabel?
    no votes  

  2. #2
    Cycloon's Avatar
    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 character
    no votes  

  3. #3
    da_flux's Avatar
    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 bedankt
    no votes  

  4. #4
    Timmos's Avatar
    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  

  5. #5
    Cycloon's Avatar
    Registered
    18/01/04
    Location
    Melle
    Posts
    10,535
    iTrader
    56 (100%)
    Mentioned
    0 Post(s)
    Reputation
    27/102
    Quote Originally Posted by da_flux View Post
    This quote is hidden because you are ignoring this member. Show
    Container c = p.getContentPane();
    c.setLayout(new FlowLayout());

    Zoiets?

    Zoja, ook al geprobeert werkt niet , toch bedankt
    Euhm, maak je nieuwe scherm eens van het type JDialog en dan kan je gewoon in de constructor setLayout(new FlowLayout()) doen. Dat zou sowieso moeten werken.
    “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 character
    no votes  

  6. #6
    Timmos's Avatar
    Registered
    10/11/03
    Location
    Gent
    Posts
    6,158
    iTrader
    41 (100%)
    Mentioned
    0 Post(s)
    Reputation
    1/121
    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);
    
        }
    Dit zal zoals in jouw voorbeeld, niet werken. Maar voeg in de de actionPerformed() methode deze regel toe:
    Code:
    frame.validate();
    en voila, bij het klikken op de knop zullen de extra labels verschijnen De API zegt van deze methode:
    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.
    Maar ik denk nog aan iets. Werkt je code niet als je in de constructor Toevoegen() als eerste lijn zet:
    Code:
    super();
    ?
    no votes  

  7. #7

    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  

  8. #8
    da_flux's Avatar
    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 bedankt
    no votes  

  9. #9
    Cycloon's Avatar
    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 character
    no votes  

  10. #10
    da_flux's Avatar
    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  

  11. #11
    Slynx's Avatar
    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:

    Code:
        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());
    
    
    
                }
            });
    Ik kan erover kijken, maar ik zie niet meteen waar je je labels genereert in je code. Meh, imo is netbeans code toch vrij onoverzichtelijk
    no votes  

  12. #12
    da_flux's Avatar
    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  

  13. #13
    Slynx's Avatar
    Registered
    17/01/05
    Location
    Dilbeek
    Posts
    1,954
    iTrader
    48 (93%)
    Mentioned
    2 Post(s)
    Overgekeken dus, sorry

    Code:
    //store column names
                for (int i = 1; i <= columnCount; i++) {
                    columns.add(md.getColumnName(i));
                    add(new JLabel(md.getColumnName(i), JLabel.LEFT));
    Je sluit je for loop niet af hier.

    Code:
    tabel.setModel(new javax.swing.table.DefaultTableModel(data, columns));
    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.
    je sluit je for-loop hier niet af?
    no votes  

  14. #14

    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:
    Code:
    	public static void main(String args[]) {
    		panel p = new panel();	
    		p.pack();
    		p.setVisible(true);
            }
    3. Zet uw private klasse variabelen bovenaan
    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 venster
    no votes  

  15. #15
    da_flux's Avatar
    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  

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  

Log in

Log in