Varför visar mitt program thread "main" java.lang.IllegalArgumentException: illegal component position ??

Permalänk

Varför visar mitt program thread "main" java.lang.IllegalArgumentException: illegal component position ??

package SelfTest; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class JComboBoxtest extends JFrame implements ActionListener{ JComboBox lista = new JComboBox(); JLabel ord = new JLabel(); JButton del = new JButton("Ta bort"); JButton add = new JButton("Lägga till"); public JComboBoxtest(){ setLayout(new FlowLayout()); add(new JLabel("Skriv vad som helst"), JLabel.RIGHT); add(lista); add(ord); add(del); add(add); ord.setHorizontalAlignment(JLabel.RIGHT); lista.setEditable(true); lista.addActionListener(this); add.addActionListener(this); del.addActionListener(this); setSize(200,100); setVisible(true); setDefaultCloseOperation(EXIT_ON_CLOSE); } public void actionPerformed(ActionEvent e){ String var = (String) lista.getSelectedItem(); ord.setText("Hi"+ var+"!"); if(e.getSource()==add) lista.addItem(lista); if(e.getSource()==del) lista.removeItem(lista); } public static void main (String[] args){ JComboBoxtest box = new JComboBoxtest(); } }

Det är kod som jag har skrivit.
Jag ska göra ett JComboBox program som man kan addera eller ta bort items i JComboBox med hjälp av knapparna lägga till och ta bort.
Men när jag kör program, java visar felutskrift

Exception in thread "main" java.lang.IllegalArgumentException: illegal component position
at java.awt.Container.addImpl(Container.java:1087)
at java.awt.Container.add(Container.java:1005)
at javax.swing.JFrame.addImpl(JFrame.java:567)
at java.awt.Container.add(Container.java:467)
at SelfTest.JComboBoxtest.<init>(JComboBoxtest.java:18)
at SelfTest.JComboBoxtest.main(JComboBoxtest.java:43)
C:\Users\(Mit namn, det är sekret)\AppData\Local\NetBeans\Cache\8.1\executor-snippets\run.xml:53: Java returned: 1

Vad har jag gjort fel?

Permalänk
Medlem

Du försöker lägga "lista" i sig själv

Permalänk
Skrivet av non_noutils:

Du försöker lägga "lista" i sig själv

Oj jag skrev fel

public void actionPerformed(ActionEvent e){ String var = (String) lista.getSelectedItem(); ord.setText("Hi"+ var+"!"); if(e.getSource()==add) lista.addItem(var); if(e.getSource()==del) lista.removeItem(var); }

Jag har byttat så
Men det fortfarande visar felutskrift

Permalänk
Medlem

Kan inte riktigt läsa sådana fel-meddelanden.. men det bör indikera vilken rad problemet är på:

at SelfTest.JComboBoxtest.<init>(JComboBoxtest.java:18)

är det möjligtvis denna?

add(add);

Permalänk
Medlem

Googlade ditt felmeddelande och hittade detta vilket ser ut att vara lösningen för dig?

http://stackoverflow.com/a/31352213

Permalänk
Skrivet av non_noutils:

Googlade ditt felmeddelande och hittade detta vilket ser ut att vara lösningen för dig?

http://stackoverflow.com/a/31352213

Tack för dina svar
Men båda två kunde inte lösa problem

Permalänk
Medlem

Felet är i raden

add(new JLabel("Skriv vad som helst"), JLabel.RIGHT);

Om du kollar på funktionen 'add' i en JFrame, så tar den en komponent och dess index (d.v.s. på vilken plats den skall komma). JLabel.RIGHT duger inte som index i ditt fall, testa att byta ut det till t.ex. 0. Det verkar som att JLabel.RIGHT används i JLabel:ens konstruktor.

Permalänk
Skrivet av Tazavoo:

Felet är i raden

add(new JLabel("Skriv vad som helst"), JLabel.RIGHT);

Om du kollar på funktionen 'add' i en JFrame, så tar den en komponent och dess index (d.v.s. på vilken plats den skall komma). JLabel.RIGHT duger inte som index i ditt fall, testa att byta ut det till t.ex. 0. Det verkar som att JLabel.RIGHT används i JLabel:ens konstruktor.

Tack så mycket!! Nu det fungerar jätte bra som har jag tänkt!
Men jag har en fråga , vad betyder 0 i mitt fall? Varför program tillåter bara 0 där? Kan ni svara på detta om ni vet ?

Permalänk
Medlem
Skrivet av ProgrammeringElev:

Tack så mycket!! Nu det fungerar jätte bra som har jag tänkt!
Men jag har en fråga , vad betyder 0 i mitt fall? Varför program tillåter bara 0 där? Kan ni svara på detta om ni vet ?

Disclaimer: Jag har bara läst dokumentationen och har inte själv någon erfarenhet av JFrame. Så jag kan ha lite fel nedan.

Det andra argumentet (som du nu valt att skriva in en 0:a) är indexet (positionen) vad jag förstått efter att ha läst hjälpen. Så om du t.ex. redan har 4 komponenter och lägger till en med add(komponent, 0) så kommer den nya komponenten du lägger till läggas in före de komponenter du redan lagt till. Om du inte bryr dig om detta så kan du ju anropa add(new JLabel("Skriv vad som helst")) utan att skriva en 0:a som andra argument. Då kommer den läggas till sist. Jag ser i din kod att du redan använder dig av den add-metoden när du lägger till "lista", "ord", "del" osv till din JFrame.

Permalänk
Medlem

Detta är ju exakt den lösningen som tillhandahålles i stackoverflow tråden jag länkade?