Avatar billede dar86 Nybegynder
21. oktober 2006 - 13:37 Der er 10 kommentarer og
1 løsning

JComboBox problem

Hej har lavet en JComboBox og tilføjet elementer til den, men når jeg trykker på pilen og listen skulle komme frem, så sker der bare ingenting.

Kan kun få fat i de andre elementer ved at gå ned via piletasterne, og har kun oprettet en normal JComboBox uden at gøre noget ved den.

Håber der er nogen der kan hjælpe.
Avatar billede _carsten Nybegynder
21. oktober 2006 - 16:47 #1
Nu er det lidt svært at se ud fra den kode du viser :)

Så her er et eksempel.

public class TestJComboBox extends javax.swing.JFrame {
   
    public TestJComboBox() {
        initComponents();
    }
   
    private void initComponents() {
        combo = new javax.swing.JComboBox();

        getContentPane().setLayout(new java.awt.FlowLayout());

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        combo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
        getContentPane().add(combo);

        pack();
    }

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new TestJComboBox().setVisible(true);
            }
        });
    }
   
    private javax.swing.JComboBox combo;
}
Avatar billede dar86 Nybegynder
21. oktober 2006 - 16:58 #2
Jo, men mit problem er egentligt ikke at lave den, hvis jeg sætter combobox'en ind i et tomt dokument, så virker det fint.

Men hvor den er nu, sker der intet når man trykker på Pilen i siden.

Der er pt 200 liniers kode, så har du et sted hvor jeg kan paste den ?
Avatar billede mikkelbm Nybegynder
21. oktober 2006 - 17:23 #3
200 linjers kode kan du sagtens poste her... Vi har set det der var værre :)
Avatar billede dar86 Nybegynder
21. oktober 2006 - 17:28 #4
Fair :D

Skal så lige siges jeg er ny til JAVA så der er nok en del slamkode / maser af ting der kan gøres bedre.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class BogerGui extends JPanel
{
    public final static long serialVersionUID = 1;
    private Bog _bog;
    private DefaultListModel _bogListe;
    private JTextField in_1, in_2, in_3, in_4, ret_1, ret_2, ret_3, ret_4, ret_5;
    private static JComboBox in_5;
    private JList _jBogListe;   
   
    public BogerGui()
    {
        setBackground (Color.cyan);
        setPreferredSize(new Dimension(500, 520));
        add (BogPanel());
        add (Tilfoej());
    }
    public static void addForfatter(Forfatter _forfatter)
    {
        in_5.addItem(_forfatter);
    }
    private Panel BogInfo()
    {
        Panel _bogInfo = new Panel();
        _bogInfo.setPreferredSize(new Dimension(220,250));
       
        JLabel lbl_1 = new JLabel("Ret Bog:");
        lbl_1.setPreferredSize(new Dimension(210,15));
       
        Panel _bogInfoLabels = new Panel();
        _bogInfoLabels.setPreferredSize(new Dimension(85,150));
       
        JLabel lbl_2 = new JLabel("Titel:");
        JLabel lbl_3 = new JLabel("ISBN:");
        JLabel lbl_4 = new JLabel("Sider:");
        JLabel lbl_5 = new JLabel("Pris:");
        JLabel lbl_6 = new JLabel("Fag og årgang:");
        lbl_2.setPreferredSize(new Dimension(85,15));
        lbl_3.setPreferredSize(new Dimension(85,15));
        lbl_4.setPreferredSize(new Dimension(85,15));
        lbl_5.setPreferredSize(new Dimension(85,15));
        lbl_6.setPreferredSize(new Dimension(85,15));
       
        _bogInfoLabels.add (lbl_2);
        _bogInfoLabels.add (lbl_3);
        _bogInfoLabels.add (lbl_4);
        _bogInfoLabels.add (lbl_5);
        _bogInfoLabels.add (lbl_6);
       
        JButton btn_1 = new JButton("Ret");
        btn_1.addActionListener (new RetInfo());
       
        _bogInfoLabels.add (btn_1);
       
        Panel _bogInfoInputs = new Panel();
        _bogInfoInputs.setPreferredSize(new Dimension(120,150));
       
        ret_1 = new JTextField (10);
        ret_2 = new JTextField (10);
        ret_3 = new JTextField (3);
        ret_4 = new JTextField (10);
        ret_5 = new JTextField (10);
   
        ret_1.setPreferredSize(new Dimension(120,15));
        ret_2.setPreferredSize(new Dimension(120,15));
        ret_3.setPreferredSize(new Dimension(120,15));
        ret_4.setPreferredSize(new Dimension(120,15));
        ret_5.setPreferredSize(new Dimension(120,15));
       
        _bogInfoInputs.add (ret_1);
        _bogInfoInputs.add (ret_2);
        _bogInfoInputs.add (ret_3);
        _bogInfoInputs.add (ret_4);
        _bogInfoInputs.add (ret_5);

       
        _bogInfo.add (lbl_1);
        _bogInfo.add (_bogInfoLabels);
        _bogInfo.add (_bogInfoInputs);
        return _bogInfo;
   
    }
   
    private Panel Tilfoej()
    {
        Panel _tilfoejPanel = new Panel();
        _tilfoejPanel.setPreferredSize(new Dimension(220,450));
       
        Panel _tilfoejPanelLabel = new Panel();
        _tilfoejPanelLabel.setPreferredSize(new Dimension(85,150));
       
        Panel _tilfoejPanelInput = new Panel();
        _tilfoejPanelInput.setPreferredSize(new Dimension(120,150));
       
        JLabel lbl_1 = new JLabel ("Ny bog:");
        lbl_1.setPreferredSize(new Dimension(220, 15));
       
        JLabel lbl_2 = new JLabel ("Titel:");
        JLabel lbl_3 = new JLabel ("ISBN nr:");
        JLabel lbl_4 = new JLabel ("Antal sider:");
        JLabel lbl_5 = new JLabel ("Fag og årgang:");
        lbl_2.setPreferredSize(new Dimension(85, 15));
        lbl_3.setPreferredSize(new Dimension(85, 15));
        lbl_4.setPreferredSize(new Dimension(85, 15));
        lbl_5.setPreferredSize(new Dimension(85, 15));
       
        JButton _send = new JButton ("Opret");
        _send.addActionListener (new OpretBog());
        _send.setPreferredSize(new Dimension(85,20));
       
        _tilfoejPanelLabel.add (lbl_2);
        _tilfoejPanelLabel.add (lbl_3);
        _tilfoejPanelLabel.add (lbl_4);
        _tilfoejPanelLabel.add (lbl_5);
        _tilfoejPanelLabel.add (_send);

        in_1 = new JTextField (10);
        in_2 = new JTextField (10);
        in_3 = new JTextField (3);
        in_4 = new JTextField (10);
       
        in_1.setPreferredSize(new Dimension(120,15));
        in_2.setPreferredSize(new Dimension(120,15));
        in_3.setPreferredSize(new Dimension(120,15));
        in_4.setPreferredSize(new Dimension(120,15));
               
        in_5 = new JComboBox();
        in_5.setPreferredSize(new Dimension(120,20));
       
        _tilfoejPanelInput.add (in_1);
        _tilfoejPanelInput.add (in_2);
        _tilfoejPanelInput.add (in_3);
        _tilfoejPanelInput.add (in_4);
        _tilfoejPanelInput.add (in_5);
       
        _tilfoejPanel.add (lbl_1);
        _tilfoejPanel.add (_tilfoejPanelLabel);
        _tilfoejPanel.add (_tilfoejPanelInput);
        _tilfoejPanel.add (BogInfo());
        return _tilfoejPanel;
    }
   
    private Panel BogPanel()
    {
        //Definerer _bogPanel som nyt Panel() og sætter dimmensionen på Panelet
        Panel _bogPanel = new Panel();
        _bogPanel.setPreferredSize(new Dimension(200, 450));
       
        //Opretter en knap samt en label, hvor knappen skal eksekvere GetInfo() når der blir trykket på den
        JButton _getInf = new JButton ("Hent boginfo:");
        _getInf.setPreferredSize(new Dimension(130, 20));
        _getInf.addActionListener(new GetInfo());
        JLabel lab_bog_1 = new JLabel ("Bøger:");
        _bogPanel.add(_getInf);
        _bogPanel.add (lab_bog_1);

        _bogListe = new DefaultListModel();
        _jBogListe = new JList(_bogListe);
        JScrollPane _scrollPanel = new JScrollPane(_jBogListe);
        _scrollPanel.setPreferredSize(new Dimension(200,270));
        _bogPanel.add (_scrollPanel);
       
        return _bogPanel;
    }
    private void SetInfo(Bog _bog)
    {
        ret_1.setText(_bog.getTitel());
        ret_2.setText(_bog.getIsbn());
        ret_3.setText(String.valueOf(_bog.getAntalSider()));
        ret_4.setText(String.valueOf(_bog.getPris()));
        ret_5.setText(_bog.getFaargang());       
    }
    private class RetInfo implements ActionListener
    {
        public void actionPerformed (ActionEvent event)
        {
            _bog.setTitel(ret_1.getText());
            _bog.setAntalSider(Integer.parseInt(ret_3.getText()));
            _bog.setFaargang(ret_5.getText());
            SetInfo(_bog);
        }
    }
    private class GetInfo implements ActionListener
    {
        public void actionPerformed (ActionEvent event)
        {
            int  _position = _jBogListe.getSelectedIndex();
            _bog = (Bog) _bogListe.get(_position);
            SetInfo(_bog);
        }
    }
    private class OpretBog implements ActionListener
    {
        public void actionPerformed (ActionEvent event)
        {
            Bog _bog = new Bog(in_2.getText());
            try {
                _bog.setTitel(in_1.getText());
                _bog.setAntalSider(Integer.parseInt(in_3.getText()));
                _bog.setFaargang(in_4.getText());
            }
            finally{
                _bogListe.addElement(_bog);
            }       
        }
    }
}
Avatar billede mikkelbm Nybegynder
21. oktober 2006 - 17:34 #5
1) Nogen speciel grund til at din combobox er static?
2) Hvorfra kalder du: "addForfatter" ?
Avatar billede dar86 Nybegynder
21. oktober 2006 - 17:42 #6
Kalder addForfatter fra en anden Gui som ligger i en Tab, grunden til at den er static er at Eclipse sagde den skulle være det for jeg kunne kalde metoden fra en anden klasse :)
Avatar billede dar86 Nybegynder
21. oktober 2006 - 17:43 #7
Men det virker fint nok, det er bare problemet at der ikke sker noget når jeg trykker på pilen i ComboBoxen, addForfatter osv virker 100% :)
Avatar billede _carsten Nybegynder
21. oktober 2006 - 22:23 #8
Du blander awt og swing, det man også sagtens når bare man ved hvad man gør, men i dette tilfælde tror jeg du har en awt komponent, som ligger ind over en swing komponent.

Da jeg ikke kan køre koden, kan jeg ikke se om det er årsagen, men det kunne se sådan ud.

Prøv lige at rette alle new Panel() til new JPanel(), så du holder det hele i ren swing, (bedst for en begynder) det gælder selvfølgelig også dine instancer af samme klasse

Eks.
Panel _bogInfo = new Panel();
til
JPanel _bogInfo = new JPanel();
Avatar billede _carsten Nybegynder
21. oktober 2006 - 22:28 #9
Du må undskylde den med "(bedst for en begynder)" synes du skrev det et eller andet, men det må være noget jeg har fanget i et andet spørgsmål :)
Avatar billede dar86 Nybegynder
22. oktober 2006 - 13:30 #10
Citat mig selv: "Skal så lige siges jeg er ny til JAVA"
Så jo det skrev jeg, så det er helt i orden :D

Men det virkede at skifte til JPanel, det er sku lækkert, tak. Smid et svar.
Avatar billede _carsten Nybegynder
22. oktober 2006 - 14:06 #11
Svar kommer her.
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester