webForumDet fria alternativet

JTabbedPane med flera paneler från klasser

Javaur Java

3 svar · 188 visningar · startad av Mc Fetto

Mc FettoMedlem sedan nov. 20022 355 inlägg
#1

Jag har en JTabbedPane som jag lägger till ett par paneler, genom att kalla på olika klasser. Dessa klasser ärver ifrån JPanel.

Detta för att sedan enkelt kunna ändra layout m m..

ex på klass:

class StudentPanel extends JPanel
	{
		private JButton jButton1;
		private JLabel jLabel1;
		private JLabel jLabel2;
		private JLabel jLabel3;
		private JLabel jLabel4;
		private JLabel jLabel5;
		private JLabel jLabel6;
		public JTextArea jTextArea1;
		private JTextField jTextField1;
		private JTextField jTextField2;
		private JTextField jTextField3;
		private JTextField jTextField4;
		
		 StudentPanel() 
		 { 
		 	
			jLabel1 = new JLabel();
			jPanel1 = new JPanel();
			jLabel2 = new JLabel();
			jTextArea1 = new JTextArea();
			jLabel3 = new JLabel();
			jLabel4 = new JLabel();
			jLabel5 = new JLabel();
			jLabel6 = new JLabel();
			jTextField1 = new JTextField();
			jTextField2 = new JTextField();
			jTextField3 = new JTextField();
			jTextField4 = new JTextField();
			jButton1 = new JButton();
			
			this.setLayout(null);
	
			jLabel2.setText("Students");
			this.add(jLabel2);
			jLabel2.setBounds(20, 20, 51, 16);
	
			jTextArea1.setColumns(20);
			jTextArea1.setEditable(false);
			jTextArea1.setRows(20);
			this.add(jTextArea1);
			jTextArea1.setBounds(20, 40, 240, 310);
	
			jLabel3.setText("Name:");
			this.add(jLabel3);
			jLabel3.setBounds(290, 40, 36, 16);
	
			jLabel4.setText("Age:");
			this.add(jLabel4);
			jLabel4.setBounds(290, 70, 25, 16);
	
			jLabel5.setText("Wheight:");
			this.add(jLabel5);
			jLabel5.setBounds(290, 100, 50, 16);
	
			jLabel6.setText("Length:");
			this.add(jLabel6);
			jLabel6.setBounds(290, 130, 60, 16);
	
			this.add(jTextField1);
			jTextField1.setBounds(350, 40, 150, 20);
	
			this.add(jTextField2);
			jTextField2.setBounds(350, 70, 150, 20);
	
			this.add(jTextField3);
			jTextField3.setBounds(350, 100, 150, 20);
	
			this.add(jTextField4);
			jTextField4.setBounds(350, 130, 150, 20);
	
			jButton1.setText("Add student");
			this.add(jButton1);
			jButton1.setBounds(391, 170, 110, 26);
	
			getContentPane().add(this, java.awt.BorderLayout.CENTER);
		 }	
	 }

Inga problem så länga man inte vill leka md komponenterna i klassen! Då får jag felet: Cannot make a static reference to the non-static field StudentPanel.jTextArea1 MainClass.java.

Felet är denna rad:

StudentPanel.jTextArea1.append((String)element);

Hur gör jag så att jag kommer åt komponenterna i klassen?

phonkworksMedlem sedan juli 2001228 inlägg
#2

Tjena!

Om du vill komma åt jTextArea1 på det viset måste du deklarera den som static:

public static JTextArea jTextArea1;

Eller också gör du en get metod

private JTextArea jTextArea1;
....

public JTextArea getTextArea() {
   return jTextArea1;
}

mvh
phonk

SPiNMedlem sedan mars 20007 896 inlägg
#3

phonk> Gör han en metod kommer han ändå inte åt den om inte metoden är deklarerad 'static'.

Mc Fetto> Varför inte skapa en instans av StudentPanel? Då kommer du runt problemet.

StudentPanel sPane = new StudentPanel();
sPane.jTextArea1.append( "..." );

:q

Mc FettoMedlem sedan nov. 20022 355 inlägg
#4

Det gjorde jag sen, tack för tipsen! Då jag inte är så hemma på java, så blev jag tvungen att ha en actionlistener i varje klass och om jag då vill skicka data mellan dem.. Alltså om en panel blir OnFocus så ska en arraylist loopas igenom och skriva ut datan i ett textfält på panelen, vet inte riktigt om jag förklarat på ett förståeligt sätt...

135 ms totalt · 3 externa anrop · v20260731065814-full.29ac60f6
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)