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

Trädvy Permalänk
Medlem
Registrerad
Apr 2016

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?

Trädvy Permalänk
Medlem
Registrerad
Jun 2014

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

Trädvy Permalänk
Medlem
Registrerad
Apr 2016
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

Trädvy Permalänk
Medlem
Registrerad
Jun 2014

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);

Trädvy Permalänk
Medlem
Registrerad
Jun 2014

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

http://stackoverflow.com/a/31352213

Trädvy Permalänk
Medlem
Registrerad
Apr 2016
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

Trädvy Permalänk
Medlem
Plats
Finland
Registrerad
Maj 2004

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.

Trädvy Permalänk
Medlem
Registrerad
Apr 2016
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 ?

Trädvy Permalänk
Medlem
Plats
Kista
Registrerad
Aug 2004
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.

Trädvy Permalänk
Medlem
Registrerad
Jun 2014

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