Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Kako da iskoristim vrednost iz promenljivih za generisanje koda

[es] :: Java :: Kako da iskoristim vrednost iz promenljivih za generisanje koda

[ Pregleda: 1081 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

stojanovic79
Student
Nis

Član broj: 223386
Poruke: 2
*.dynamic.sbb.rs.



Profil

icon Kako da iskoristim vrednost iz promenljivih za generisanje koda23.05.2009. u 01:16 - pre 181 meseci
Pokusavam da napisem java aplikaciju koja ce na osnovu vrednosti koje korisnik izabere,a ja ih sacuvam u 3 promenljive tipa String da generise kontrolu.
Code:


import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;



public class Forma extends JFrame implements ActionListener
{
    /**
     * 
     */
    private static final long serialVersionUID = 1395984751286335579L;
    private String layout;
    private String alignment;
    private String control;
    JComboBox combo = new JComboBox(new String []  {"Select Layout","BorderLayout","BoxLayout","FlowLayout"});
    JComboBox borderCombo = new JComboBox(new String []  {"Select Alignment","CENTER","EAST","NORTH","SOUTH","WEST"});
    JComboBox controlBox = new JComboBox (new String []  {"Select Control","JButton","JLabel","JList","JCheckBox","JComboBox"});
    
    JPanel mainPanel = new JPanel();
    JPanel controlPanel = new JPanel();
    JPanel lstPanel = new JPanel();
    JButton btnOk = new JButton("Ok");
    
    
    
    public Forma()
    {
        setAlwaysOnTop(true);
        //setResizable(false);
        setTitle("Layout Demo");
        setSize(500, 400);
        setLocation(500, 400);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        
        
        
        mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
        mainPanel.add(controlPanel);
        mainPanel.add(lstPanel);
        mainPanel.add(btnOk);btnOk.setVisible(false);
        lstPanel.add(combo);
        lstPanel.add(borderCombo);borderCombo.setVisible(false);
        lstPanel.add(controlBox);controlBox.setVisible(false);
        combo.addActionListener(this);
        borderCombo.addActionListener(this);
        controlBox.addActionListener(this);
        btnOk.addActionListener(this);
        add(mainPanel);
        
        
        
    }

    @Override
    public void actionPerformed(ActionEvent arg0) 
    {
        if(arg0.getSource()== combo && combo.getSelectedIndex() !=0)
        {
            layout = combo.getSelectedItem().toString();
            borderCombo.setVisible(true);                
        }
        else if(combo.getSelectedIndex() ==0)
        {
            borderCombo.setVisible(false);
            borderCombo.setSelectedIndex(0);
            controlBox.setVisible(false);
            controlBox.setSelectedIndex(0);
            btnOk.setVisible(false);
        }
        else if (arg0.getSource()== borderCombo && borderCombo.getSelectedIndex()!=0)
        {
            alignment = borderCombo.getSelectedItem().toString();
            controlBox.setVisible(true);
                    
        }
        else if (borderCombo.getSelectedIndex()==0)
        {
            controlBox.setVisible(false);
            controlBox.setSelectedIndex(0);
            btnOk.setVisible(false);
        }
        
        else if (arg0.getSource()== controlBox && controlBox.getSelectedIndex() !=0)
        {
            control = controlBox.getSelectedItem().toString();
            btnOk.setVisible(true);
            
                
        }
        else if(arg0.getSource()== btnOk)
        {
            //ovde sam hteo da generisem kontrolu pomocu informacija koje imam u 
            //private String layout;
            //private String alignment;
            //private String control;
            
        }
    }
}

Pomoc :)
 
Odgovor na temu

escape...
student
Bg

Član broj: 163295
Poruke: 37
194.106.160.*



+1 Profil

icon Re: Kako da iskoristim vrednost iz promenljivih za generisanje koda25.05.2009. u 14:05 - pre 181 meseci
Sudeći po ovom što do sada videh, pretpostavljam da hoćeš da koristiš refleksiju (a ne da koristiš gomilu if-ova kako bi ispitao izabrane vrednosti i kreirao odgovarajuće instance).

U tom slučaju, možeš ovako kreirati kontrolu:
Code:

try {
     Class controlClass = Class.forName("javax.swing." + control);
     JComponent controlInstance = (JComponent) controlClass.newInstance();
     getContentPane().add(controlInstance);
//   controlInstance.setBounds(x, y, z, w);
}
catch (Exception e){
}


Slično bi bilo i za LayoutManager-e, s tim što se, koliko videh, layout-i koje ti nudiš nalaze u različitim paketima (neki se nalaze u javax.swing, a neki u java.awt), a za učitavanje klase potrebna je puna hijerarhijska putanja do klase.

Ovo bi mogao da rešiš tako što ćeš ili staviti pune putanje layout-a u combo box-u, ili putem "pokušaja i pogrešaka", tj:
Code:

Class layoutClass = null;
try{
    layoutClass = Class.forName("javax.swing."+layout);
}
catch (ClassNotFoundException cnfe){
    try{
        layoutClass = Class.forName("java.awt"+layout);
    }
    catch (ClassNotFoundException e){
    }
}


Zatim bi trebalo kreirati instancu LayoutManager-a, npr.ovako:
Code:

// default layoutManager je ,npr., null 
LayoutManager layoutInstance = null;
// a ako se neka od klasa uspešno učitala
if (layoutClass != null){
    try{
        layoutInstance = (LayoutManager) layoutClass.newInstance();
    }
    catch (Exception e){
    }
}

i, naravno, posle toga postaviti layout manager.

E, sad, što se tiče alignment-a, nisam sigurna da razumem na koju komponentu želiš da ga primeniš, ali primetih da alignment-i koje si ponudio nisu primenljivi na sve kontrole.

 
Odgovor na temu

stojanovic79
Student
Nis

Član broj: 223386
Poruke: 2
*.dynamic.sbb.rs.



Profil

icon Re: Kako da iskoristim vrednost iz promenljivih za generisanje koda26.05.2009. u 03:46 - pre 181 meseci
Hvala ti puno.Upravo su mi danas rekli da je nemoguce da se izvede to sto si izvela zato sto ne moze program da se rekompajlira u toku izvrsenja ...Pokusacu da malo eksperimentisem pa se javim ako zapnem oko necega sto je "nemoguce" da se izvede
 
Odgovor na temu

escape...
student
Bg

Član broj: 163295
Poruke: 37
194.106.160.*



+1 Profil

icon Re: Kako da iskoristim vrednost iz promenljivih za generisanje koda26.05.2009. u 11:32 - pre 181 meseci
Eto, itekako je moguće. :) Gomila framework-a funkcioniše koristeći mehanizam refleksije. Mada, tek da imaš u vidu, ove operacije važe za skupe.

Inače, klase koje koristiš nalaze se u paketu java.lang.reflect. Pa se igraj. :)
 
Odgovor na temu

[es] :: Java :: Kako da iskoristim vrednost iz promenljivih za generisanje koda

[ Pregleda: 1081 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.