Avatar billede trp79 Nybegynder
05. marts 2003 - 16:56 Der er 7 kommentarer og
1 løsning

GUI: JScrollPane og Editable

1)
Jeg har nogle textfields (og et textarea) som jeg gerne vil gøre editable når jeg trykker på knappen edit. Men der sker ingen ting når jeg trykke på den. Disse tekstfields får ved oprettelsen status setEditable(false);

Her er lidt udvalgt kode:
//textField tlf...
tFTlf.setEditable(false);
tFTlf.setFont(new java.awt.Font("Dialog", 0, 10));
getContentPane().add(tFTlf);
tFTlf.setBounds(160, 150, 80, 20);

//Min event ved tryk på knappen edit (jBEdit)
private void jBFEditActionPerformed(java.awt.event.ActionEvent evt) {
tFEmail.setEditable(true);
jTAFNoter.setEditable(true);
tFFax.setEditable(true);
tFTlf.setEditable(true);
tFAdr2.setEditable(true);
tFAdr1.setEditable(true);
tFLand.setEditable(true);
tFAdr3.setEditable(true);
getContentPane().add(tFEmail);
getContentPane().setVisible(false); //Er dette nødvendigt?
getContentPane().setVisible(true); //Er dette nødvendigt?
}


2)
jeg har desuden 3 jList's  og et tekstarea. Jeg vil gerne knytte en scrollbar til hver af dem. Jeg har forsøgt med understående kode (ved et textarea) men det resulter blot i at textarea'et helt forsvinder :o(

jTAFNoter.setEditable(false);
jTAFNoter.setFont(new java.awt.Font("Dialog", 0, 10));
getContentPane().add(jTAFNoter);
jTAFNoter.setBounds(350, 120, 170, 140);
JScrollPane scroller = new JScrollPane(jTAFNoter);
getContentPane().add(scroller);

Hvad gør jeg forkert og hvordan kan jeg rette det?

mvh
Torben
Avatar billede viht Nybegynder
05. marts 2003 - 17:09 #1
Det er utrolig lidt der skal til, dette er et lille eksempel på det.

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class TestFrame extends JFrame {
   
    public TestFrame() {
        super("Test");
        setSize(400,400);
       
        final JTextArea area = new JTextArea();
        area.setEditable(false);
       
        JButton button = new JButton("Edit");
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                boolean editable = area.isEditable();
                area.setEditable(!editable);
                if( !editable )
                    area.append("Area is now editable\n");
                else
                    area.append("Area is now non-editable\n");
            }
        });
        JPanel buttonPanel = new JPanel();
        buttonPanel.add(button);
       
        getContentPane().add(buttonPanel, BorderLayout.SOUTH);
        getContentPane().add(new JScrollPane(area), BorderLayout.CENTER);
    }
}

class Go {
    public static void main(String[] args) {
      new TestFrame().show();
  }
}
Avatar billede viht Nybegynder
05. marts 2003 - 17:09 #2
Du kan også se jeg pakker JTextArea'et ind i et JScrollPane objekt inden jeg kommer det på JFrame.
//getContentPane().add(new JScrollPane(area), BorderLayout.CENTER);
Avatar billede viht Nybegynder
05. marts 2003 - 17:17 #3
For at registrere events på en knap skal du tilføje en ActionListener til den.
Det kan du gøre på to måder.
1) Som jeg har gjort det ovenfor ved at definere metoden
actionPerformed(ActionEvent event) {
  ...
}
på knappen selv.

Du kan også lade din GUI klasse implementere ActionListener interfacet:
public class MyFrame extends JFrame implements ActionListener {
...
  private JTextArea area;
  private JButton button1;
  private JButton button2;
  ...
  public void actionPerformed(ActionEvent event) {
      Object source = event.getSource();
      if( source == button1 ) {
        // Der blev trykket på button1!
      }
      else if( source == button2 ) {
        // Der blev trykket på button2!
      }
  ...
}

Ydermere kan jeg anbefale du læser lidt om GUI managers og om generelt opbygning i Swing. Du kommer dårligt fra start hvis du bruger null layout og placerer hver komponent med pixel nøjagtighed.

Om Swing:
http://java.sun.com/docs/books/tutorial/uiswing/index.html

Om Layout Managers:
http://www.docjava.dk/gui/layout_managers/layout_managers.htm
og generelt bare www.docjava.dk
Avatar billede trp79 Nybegynder
05. marts 2003 - 18:19 #4
Ved godt jeg burde bruge en layout manager, men bruger netbeans til guiarbejdet så det går endnu...

Scrollbaren jeg har knyttet til tekstfeltet er både vertikalt og horisontalt..
jeg vil gerne nøjes med vertikalt... hvordan kan det gøres?
Avatar billede viht Nybegynder
05. marts 2003 - 18:33 #5
Sådan her
getContentPane().add(new JScrollPane(area,  ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER), BorderLayout.CENTER);
Avatar billede trp79 Nybegynder
05. marts 2003 - 18:41 #6
Det virker fint med hensyn til den vertikale scrollbar. Men nu er der selvfølgelig opstået et nyt problem... når jeg så skriver noget tekst i mit textfield, så fortsætter den bare hen "til højre". Det bevirker at man er nød til at trykke enter hver gang man kommer hen til højre side af tekst feltet.
Kan man undgå det på nogen måde?
Avatar billede viht Nybegynder
05. marts 2003 - 18:42 #7
Du mener på et JTextArea, right?
area.setLineWrap(true);
area.setWrapStyleWord(true);
Avatar billede trp79 Nybegynder
05. marts 2003 - 19:32 #8
Forrygende! Jeg takker :D
Mvh
Torben
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester