Cyllon Skrevet 3. november 2013 Del Skrevet 3. november 2013 (endret) Hei, jeg driver å lærer meg programmering i Java. For å lærer leser jeg boken "programmering i Java". Det er en kode-bit på siden jeg er på der jeg får en error. Stacktracen: Exception in thread "main" java.lang.IllegalArgumentException: illegal component position at java.awt.Container.addImpl(Container.java:1080) at java.awt.Container.add(Container.java:460) at me.Cyllon.bet.Vindu$InnloggingsPanel.<init>(Vindu.java:56) at me.Cyllon.bet.Vindu.<init>(Vindu.java:47) at me.Cyllon.bet.TestTekstkomponenter.main(Vindu.java:149) package me.Cyllon.bet; import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import java.text.DateFormatSymbols; import java.util.Arrays; import javax.swing.DefaultListModel; import javax.swing.GroupLayout; import javax.swing.InputVerifier; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JPasswordField; import javax.swing.JScrollPane; import javax.swing.JSpinner; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.ListSelectionModel; import javax.swing.SpinnerListModel; import javax.swing.SpinnerModel; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; public class Vindu extends JFrame{ private static final String STANDARD = "Du kan skrive noe her dersom du skriver inn riktig passord."; private JTextField brukernavnFelt = new JTextField(15); private JPasswordField passordFelt = new JPasswordField(15); private JTextArea tekstfelt = new JTextArea(10,20); private JButton skriveknapp = new JButton("Skriv"); private JLabel meldingsfelt = new JLabel("her kommer meldinger..."); public Vindu(String tittel){ setTitle(tittel); setDefaultCloseOperation(EXIT_ON_CLOSE); setLayout(new BorderLayout(5,5)); add(new InnloggingsPanel(), BorderLayout.NORTH); add(new TekstomraadePanel(), BorderLayout.CENTER); add(new KnappePanel(), BorderLayout.SOUTH); pack(); } private class InnloggingsPanel extends JPanel{ public InnloggingsPanel(){ setLayout(new GridLayout(2, 2, 5, 5)); add(new JLabel("Brukernavn:"), JLabel.RIGHT); add(brukernavnFelt); brukernavnFelt.setInputVerifier(new BrukernavnKontroll()); add(new JLabel("Passord:"), JLabel.RIGHT); add(passordFelt); passordFelt.setInputVerifier(new PassordKontroll()); passordFelt.addFocusListener(new Fokuslytter()); } } private class TekstomraadePanel extends JPanel{ public TekstomraadePanel(){ tekstfelt.setLineWrap(true); tekstfelt.setWrapStyleWord(true); tekstfelt.setEditable(false); tekstfelt.setText(STANDARD); JScrollPane rullefelt = new JScrollPane(tekstfelt); add(rullefelt); } } private class KnappePanel extends JPanel{ public KnappePanel(){ KnappeLytter knappelytteren = new KnappeLytter(); skriveknapp.addActionListener(knappelytteren); skriveknapp.setEnabled(false); skriveknapp.setMnemonic('S'); add(skriveknapp); add(meldingsfelt); } } class BrukernavnKontroll extends InputVerifier{ public boolean verify(JComponent inndata){ JTextField tekstfelt = (JTextField) inndata; String data = tekstfelt.getText(); return(data.equals("test")); } public boolean shouldYieldFocus(JComponent inndata){ boolean ok = super.shouldYieldFocus(inndata); if(ok){ meldingsfelt.setText("Brukernavn ok"); }else{ meldingsfelt.setText("Ugyldig brukernavn"); } return ok; } } class PassordKontroll extends InputVerifier{ public boolean verify(JComponent inndata){ char[] riktigpassord = {'t','e','s','t'}; JPasswordField tekstfelt = (JPasswordField) inndata; char[] passord = tekstfelt.getPassword(); return (Arrays.equals(passord, riktigpassord)); } public boolean shouldYieldFocus(JComponent inndata){ boolean ok = super.shouldYieldFocus(inndata); if(ok){ meldingsfelt.setText("Ok. Du kan begynne å skrive"); }else{ meldingsfelt.setText("Ugylgid passord"); } return ok; } } private class Fokuslytter implements FocusListener{ public void focusLost(FocusEvent hendelse){ skriveknapp.setEnabled(true); tekstfelt.setEditable(true); tekstfelt.requestFocusInWindow(); } @Override public void focusGained(FocusEvent e) { // TODO Auto-generated method stub } } private class KnappeLytter implements ActionListener{ public void actionPerformed(ActionEvent hendelse){ String tekst = tekstfelt.getText(); System.out.println("Teksten ser slik ut:"); System.out.println(tekst); } } } class TestTekstkomponenter{ public static void main(String[] args){ Vindu vindu = new Vindu("Dette kommer til å være tittelen"); vindu.setVisible(true); } } Vindu vil ikke vise seg, setVisible er satt til true. Hvis jeg ikke tar helt feil er det noe med layouten og Jlabel, jeg vet ikke. Post nedenfor om du kan hjelpe meg, takk Endret 3. november 2013 av Cyllon Lenke til kommentar
Svetoma Skrevet 3. november 2013 Del Skrevet 3. november 2013 Hvor står størrelsen på vinduet? vindu.setSize(bredde, høyde); bredde og høyde bytter med ditt ønske Lenke til kommentar
Cyllon Skrevet 3. november 2013 Forfatter Del Skrevet 3. november 2013 Man trenger vel ikke å sette størrelse på vinduet hvis jeg bruker pack (); ? Og da hadde vinduet vist seg hvis det var feilen. Lenke til kommentar
Svetoma Skrevet 3. november 2013 Del Skrevet 3. november 2013 Er selv nybegynner, så vet ærligtalt ikke så mye selv. Se om noen andre på forumet reagerer. Jobber vanligvis med spill jeg. Lenke til kommentar
Fred7555 Skrevet 3. november 2013 Del Skrevet 3. november 2013 Prøv å endre add(new JLabel("Brukernavn:"), JLabel.RIGHT); ... add(new JLabel("Passord:"), JLabel.RIGHT); med add(new JLabel("Brukernavn:"), JLabel.RIGHT_ALIGNMENT); ... add(new JLabel("Passord:"), JLabel.RIGHT_ALIGNMENT); Lenke til kommentar
Cyllon Skrevet 3. november 2013 Forfatter Del Skrevet 3. november 2013 (endret) Takk skal du ha. Dette hjalp meg veldig. Du vet vel ikke tilfeldigvis hvorfor det er _asignment også? Det jeg lirte på er hvorfor oppstår dette? Endret 3. november 2013 av Cyllon Lenke til kommentar
Fred7555 Skrevet 3. november 2013 Del Skrevet 3. november 2013 (endret) Vet dessverre ikke hvorfor, da JLabel.RIGHT er en int i SwingConstant mens JLabel.RIGHT_ALIGNMENT en float i Component. Konstruktøren tar inn en String samt en int, så er usikker der. Om jeg skulle gjette så er det fordi .RIGHT er en konstant med en verdi som ikke passer i denne sammenhengen, mens .RIGHT_ALIGNMENT er. Men det er som sagt gjetting, usikker på hvorfor det skjer. Endret 3. november 2013 av Fred7555 Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå