Gå til innhold

[Error] Innlogging i Java


Anbefalte innlegg

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 av Cyllon
Lenke til kommentar
Videoannonse
Annonse

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 av Fred7555
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...