2013-06-04, 07:00
  #1
Medlem
binics avatar
Sttt p ett litet problem. Jag frsker redirecta output frn en knapptryckning till en textarea. Jag fr inga fel i koden men det hnder inget med textarean.

Kod:
public class Test extends JPanel {
    public JTextArea textArea;
    final static boolean shouldFill = true;
    final static boolean shouldWeightX = true;
    private static final boolean RIGHT_TO_LEFT = false;

	public static void addComponentsToPane(Container pane) {
		if (RIGHT_TO_LEFT) {
			pane.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
		}
	}

		public Test() {
		super(new GridLayout(2,2,5,5));
		
		JTabbedPane tabbed = new JTabbedPane();
		
		JComponent panel1 = makeTextPanel();
		tabbed.addTab("Tab 1", panel1);
		
		add(tabbed);

		textArea = new JTextArea(6,20);
		textArea.setEditable(true);
		textArea.append("Hr funkar det");

		JButton bt = new JButton("Run");
		panel1.add(bt);
		
		ButtonHandler btHandler = new ButtonHandler();
		bt.addActionListener(btHandler);
		tabbed.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);

Kod:
	class ButtonHandler implements ActionListener {
		public void actionPerformed(ActionEvent e){
		   ...
		   Test test= new Test();
		   test.textArea.append("Denna syns inte i textarea.");
		   ...
Citera
2013-06-04, 07:23
  #2
Medlem
Om du vill f andra personer att hjlpa till och titta p exemplet s kan de var lmpligt att du gr det ltt fr dem, tex:

Indentera koden (Korrekt indentera ..)
Se till att du har ett komplett setup s att man kan surfa in p 1 sida pch se vad som hnder (Eller vad som inte hnder)
Citera
2013-06-04, 10:02
  #3
Medlem
binics avatar
Citat:
Ursprungligen postat av sagonar
Om du vill f andra personer att hjlpa till och titta p exemplet s kan de var lmpligt att du gr det ltt fr dem, tex:

Indentera koden (Korrekt indentera ..)
Se till att du har ett komplett setup s att man kan surfa in p 1 sida pch se vad som hnder (Eller vad som inte hnder)

Det blev tyvrr s nr jag klistrade in koden. Sen r det inte s mnga rader kod heller s borde vara ganska enkelt att se problemet nd.
Citera
2013-06-04, 10:23
  #4
Moderator
Protons avatar
Citat:
Ursprungligen postat av binic
Sttt p ett litet problem. Jag frsker redirecta output frn en knapptryckning till en textarea. Jag fr inga fel i koden men det hnder inget med textarean.

Kod:
public class Test extends JPanel {
    public JTextArea textArea;
    final static boolean shouldFill = true;
    final static boolean shouldWeightX = true;
    private static final boolean RIGHT_TO_LEFT = false;

	public static void addComponentsToPane(Container pane) {
		if (RIGHT_TO_LEFT) {
			pane.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
		}
	}

		public Test() {
		super(new GridLayout(2,2,5,5));
		
		JTabbedPane tabbed = new JTabbedPane();
		
		JComponent panel1 = makeTextPanel();
		tabbed.addTab("Tab 1", panel1);
		
		add(tabbed);

		textArea = new JTextArea(6,20);
		textArea.setEditable(true);
		textArea.append("Hr funkar det");

		JButton bt = new JButton("Run");
		panel1.add(bt);
		
		ButtonHandler btHandler = new ButtonHandler();
		bt.addActionListener(btHandler);
		tabbed.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);

Kod:
	class ButtonHandler implements ActionListener {
		public void actionPerformed(ActionEvent e){
		   ...
		   Test test= new Test();
		   test.textArea.append("Denna syns inte i textarea.");
		   ...
Det ser ju aningen snett ut i din knapphandler dr du skapar en ny instans av test och sedan stter nt vrde i denna nya instans. Det r allts inte samma instans som du trycker p knappen i.
Citera
2013-06-04, 10:48
  #5
Medlem
binics avatar
Citat:
Ursprungligen postat av Proton
Det ser ju aningen snett ut i din knapphandler dr du skapar en ny instans av test och sedan stter nt vrde i denna nya instans. Det r allts inte samma instans som du trycker p knappen i.

Jag testade att skapa en ny instans av Test fr att komma t textarean som finns i den men frstr nu att det inte gr. Java r rtt nytt fr mig s har nog inte frsttt logiken i det hr n. Men hur kommer jag t textarean i Test instansen frn "class ButtonHandler implements ActionListener..."?
Citera
2013-06-04, 11:53
  #6
Medlem
binics avatar
Det lste sig, tack...
__________________
Senast redigerad av binic 2013-06-04 kl. 12:07.
Citera
2013-06-04, 12:22
  #7
Moderator
Protons avatar
Citat:
Ursprungligen postat av binic
Det lste sig, tack...
Antar att du anvnde getSource()-metoden i ditt Actionevent, men du kanske kunde tala om fr andra hur du gjorde med?
Citera
2013-06-04, 12:37
  #8
Medlem
binics avatar
Citat:
Ursprungligen postat av Proton
Antar att du anvnde getSource()-metoden i ditt Actionevent, men du kanske kunde tala om fr andra hur du gjorde med?

Det var mycket enklare n s. Jag fljde ditt rd och tog bort den nya instansen Test. Jag gjorde det tidigare ocks men d var variabeln JTextArea textArea inte publik s hade inte tkomst till den, drfr det inte fungerade. S frutom att deklarera variabeln publikt s bytte jag ut detta:

Kod:
class ButtonHandler implements ActionListener {
	public void actionPerformed(ActionEvent e){
		...
		Test test= new Test();
		test.textArea.append("Denna syns inte i textarea.");
		...

mot
Kod:
class ButtonHandler implements ActionListener {
	public void actionPerformed(ActionEvent e){
		...
		textArea.append("Funkar");
		...

Klantigt av mig att inte komma p det tidigare.
Citera
2013-06-04, 21:32
  #9
Moderator
Protons avatar
Citat:
Ursprungligen postat av binic
Det var mycket enklare n s. Jag fljde ditt rd och tog bort den nya instansen Test. Jag gjorde det tidigare ocks men d var variabeln JTextArea textArea inte publik s hade inte tkomst till den, drfr det inte fungerade. S frutom att deklarera variabeln publikt s bytte jag ut detta:

Kod:
class ButtonHandler implements ActionListener {
	public void actionPerformed(ActionEvent e){
		...
		Test test= new Test();
		test.textArea.append("Denna syns inte i textarea.");
		...

mot
Kod:
class ButtonHandler implements ActionListener {
	public void actionPerformed(ActionEvent e){
		...
		textArea.append("Funkar");
		...

Klantigt av mig att inte komma p det tidigare.
Tycker det r fel stt att lsa problemet genom att ha publika attribut i dina klasser, det bryter ju mot alla inkapslingar som gr OOP s frtrffligt.

Du hade troligen kunnat anvnda getSource fr att f tag p en referens till din JTextArea i din actionhanterarklass, drefter hade du kunnat typa om den till en JTextArea och sedan kra append-metoden p den.
Citera
2013-06-05, 11:09
  #10
Medlem
binics avatar
Citat:
Ursprungligen postat av Proton
Tycker det r fel stt att lsa problemet genom att ha publika attribut i dina klasser, det bryter ju mot alla inkapslingar som gr OOP s frtrffligt.

Du hade troligen kunnat anvnda getSource fr att f tag p en referens till din JTextArea i din actionhanterarklass, drefter hade du kunnat typa om den till en JTextArea och sedan kra append-metoden p den.

Jag r som sagt rtt ny p det hr s hade ingen koll p getSource metoden men r tacksam fr att du sger till, vill sklart lra mig rtt frn brjan. Jag anvnder getSource nu och bde knapp och textarea r private.

Kod:
	class ButtonHandler implements ActionListener {
		public void actionPerformed(ActionEvent e){
		   Object source = e.getSource();
		   if (source == bt)
			   textAreaB.append("Funkar");
__________________
Senast redigerad av binic 2013-06-05 kl. 11:39.
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in