Avatar billede netspinner Nybegynder
21. marts 2006 - 11:58 Der er 11 kommentarer og
1 løsning

JScrollPane på JTextArea

Hej,
Jeg har programmeret et system, der kan indeholde et utal af et records, der bliver gemt i en ekstern fil. Når brugeren vælger at liste samtlige records i JTextArea-feltet eller gør programvinduet mindre, skal der tilføjes en JScrollPane, så brugeren kan scrolle både horisontalt og vertikalt i JTextArea for at kunne se al data.

Jeg kan ikke få det til at virke, men har forsøgt med flg.:

JScrollPane pane = new JScrollPane(displayArea); // displayArea er mit JTextArea

I konstruktoren tilføjer jeg JScrollPane objektet til min GUI:

add(pane);


Den bliver bare aldrig synlig... løsningen er sikkert enkel, jeg kan bare ikke se mig ud af det :)
Avatar billede kalp Novice
21. marts 2006 - 12:01 #1
add(pane);

skal også være der.. har du også tilføjet displayArea? så skal du fjerne den!

altså fjern

add(displayArea);
Avatar billede netspinner Nybegynder
21. marts 2006 - 12:11 #2
Jeg har ikke tilføjet displayArea på den måde, men er jo nødt til at få den placeret i GUI'en, hvilket jeg gør vha. et Panel: this.add("Center", displayArea);
Dernæst skal et JScrollPane objekt jo assignes til displayArea...
Avatar billede mikkelbm Nybegynder
21. marts 2006 - 12:31 #3
For det første:

this.add("Center", displayArea);

"This method is obsolete as of 1.1. Please use the method add(Component, Object) instead."

http://java.sun.com/j2se/1.5.0/docs/api/java/awt/Container.html#add(java.lang.String,%20java.awt.Component)

Hvilket vil sige, at du ikke skal bruge den.

Derimod skal du bruge:

add (displayArea, "Center");


Se lige om det virker.
Avatar billede kalp Novice
21. marts 2006 - 12:44 #4
netspinner >> Det kan selvfølgelig godt være man skal placere sit JtextArea.. men eftersom

JScrollPane pane = new JScrollPane(displayArea);

giver dit et samlet objekt så plejer det for mig, at virke fint hvis blot jeg roder rundt med min jscrollpane..

med mindre det har ændret sig i 1.5.0 :)
Avatar billede netspinner Nybegynder
21. marts 2006 - 12:53 #5
mikkelbm -> Det virker fint, som man må forvente, med add(displayArea, "Center");
Avatar billede mikkelbm Nybegynder
21. marts 2006 - 12:57 #6
Men det løser ikke dit problem?
Avatar billede netspinner Nybegynder
21. marts 2006 - 12:58 #7
Overhovedet ikke... Hmm... jeg prøver lige at uploade min kode.
Avatar billede netspinner Nybegynder
21. marts 2006 - 13:05 #8
Her følger min kode - bemærk, alle metoder er udeladt!


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
/**
*
* Class BookTableGUI
*
* @version March 2006
*/

public class BookTableGUI extends JFrame implements ActionListener
{
  //the attributes
  private  BookTable library; // vigtig instansvariabel for IO!
 

  private  JLabel isbnLabel = new JLabel("ISBN  ", JLabel.RIGHT);
  private  JTextField isbnField = new JTextField(50);
  private  JLabel titleLabel = new JLabel("Title  ", JLabel.RIGHT);
  private  JTextField titleField = new JTextField(50);
  private  JLabel authorLabel = new JLabel("Author(s)  ", JLabel.RIGHT);
  private  JTextField authorField = new JTextField(50);
  private  JLabel blankLabel1 = new JLabel();
  private  JLabel blankLabel2 = new JLabel();
  private  JLabel blankLabel3 = new JLabel();
 
 
 
  private  JMenuBar bar = new JMenuBar();
 
  private  JMenu editMenu  = new JMenu("Edit");
  private  JMenu searchMenu = new JMenu("Search");
  private  JMenu fileMenu  = new JMenu("File");
 
  //Submenu for "Search Books by Author"
  private  JMenu addfuncMenu = new JMenu("Additional Functionality");
 
  private  JMenuItem addItem    = new JMenuItem("Add",
                                                new ImageIcon("note.gif"));
  private  JMenuItem removeItem = new JMenuItem("Remove");
 
  private  JMenuItem findisbnItem = new JMenuItem("Search by ISBN");
  private  JMenuItem listrecordsItem = new JMenuItem("List Records");
 
  //"Search Books by Author" in submenu...
  private  JMenuItem authorItem = new JMenuItem("Search Books by Author",
                                                new ImageIcon("icon_eek.gif"));

  private  JMenuItem save    = new JMenuItem("Save");                                           
  private  JMenuItem savequit = new JMenuItem("Save And Quit");
  private  JMenuItem quit    = new JMenuItem("Quit Without Saving");
 
  private  JTextArea displayArea = new JTextArea(5,10);

  private  JLabel errorLabel = new JLabel("  ");
 
  private  JPanel inputPanel = new JPanel();
  private  JPanel topPanel = new JPanel();

  //Assign a JScrollPane to the displayArea in case we need to scroll through tons of records
  //private JScrollPane pane = new JScrollPane(displayArea);
  //private JScrollPane pane = new JScrollPane();
 
  //the constructor
  public BookTableGUI()
  {
      setTitle("Book Table GUI");
      setSize(700,400);
     
      library = new BookTable();
     
      BookIO.readList(library); // Denne sætning er rigelig til at kunne indlæse gemte poster!!
     
      topPanel.setLayout(new GridLayout(2,1));
      inputPanel.setLayout(new GridLayout(3,3));

      //Add the JScrollPane object
      JScrollPane pane = new JScrollPane(displayArea);
      add(pane);
     
      inputPanel.add(isbnLabel);
      inputPanel.add(isbnField);
      inputPanel.add(blankLabel1);
      inputPanel.add(titleLabel);
      inputPanel.add(titleField);
      inputPanel.add(blankLabel2);
      inputPanel.add(authorLabel);
      inputPanel.add(authorField);
      inputPanel.add(blankLabel3);
     
      topPanel.add(inputPanel);
     
      this.add("North", topPanel);
      //this.add("Center", displayArea);
      add(displayArea, "Center");
      this.add("South", errorLabel);
     
      getContentPane().setBackground(Color.lightGray);
      setVisible(true);
   
     
      this.setJMenuBar(bar);

      bar.add(fileMenu);
        fileMenu.setMnemonic(KeyEvent.VK_F);
      bar.add(editMenu);
        editMenu.setMnemonic(KeyEvent.VK_E);
      bar.add(searchMenu);
        searchMenu.setMnemonic(KeyEvent.VK_S);
      bar.add(addfuncMenu);
        addfuncMenu.setMnemonic(KeyEvent.VK_A);
     
      editMenu.add(addItem);
      editMenu.add(removeItem);
     
      //Assign Key Accelerators to Add and Remove functions
      addItem.setAccelerator(KeyStroke.getKeyStroke(
            KeyEvent.VK_D, ActionEvent.CTRL_MASK));
      removeItem.setAccelerator(KeyStroke.getKeyStroke(
            KeyEvent.VK_R, ActionEvent.CTRL_MASK));
     
      searchMenu.add(findisbnItem);
      searchMenu.add(listrecordsItem);
     
      //Assign Key Accelerator to List Records function
      listrecordsItem.setAccelerator(KeyStroke.getKeyStroke(
            KeyEvent.VK_1, ActionEvent.ALT_MASK));
     
      fileMenu.add(save);
     
      //Assign Key Accelerator to Save function
      save.setAccelerator(KeyStroke.getKeyStroke(
            KeyEvent.VK_S, ActionEvent.CTRL_MASK));
     
      //Separate Save function from the two others
      fileMenu.addSeparator();
     
      fileMenu.add(savequit);
      fileMenu.add(quit);
     
      //Assign Mnemonic to Quit function
      quit.setMnemonic(KeyEvent.VK_Q);
     
      //Add separator to searchMenu to separate submenu
      searchMenu.addSeparator();
     
      //Add submenu to menu
      searchMenu.add(addfuncMenu);
     
      //Add item to submenu
      addfuncMenu.add(authorItem);
     
      addItem.addActionListener(this);
      removeItem.addActionListener(this);
     
      findisbnItem.addActionListener(this);
      listrecordsItem.addActionListener(this);
      authorItem.addActionListener(this);
     
      save.addActionListener(this);
      savequit.addActionListener(this);
      quit.addActionListener(this);
  }
}
Avatar billede mikkelbm Nybegynder
21. marts 2006 - 13:14 #9
Hvorfor er det egentlig at du har både:

add(displayArea, "Center");

og

add(pane);

Disse to vil tilføje til samme sted. Og jeg tror det er der fejlen ligger. En Component kan ikke tilføjes og vises på flere andre Containers.

Fjern derfor:

add(displayArea, "Center");
Avatar billede netspinner Nybegynder
21. marts 2006 - 13:34 #10
Nå, jamen jeg har prøvet at udkommentere linierne bare for at se om forsk. tilgange ville løse det, så add(pane); har jeg bare glemt at ud kommentere.

Nuvel, hvis jeg udkommenterer add(displayArea, "Center");, kommer pane objektet til syne, men så virker displayArea ikke som det skal - dvs. det kan ikke vise data!
Avatar billede netspinner Nybegynder
21. marts 2006 - 13:38 #11
Ups, det virker perfekt alligevel, havde udkommenteret noget andet ;)
Tak for hjælpen, det hjalp med et par friske øjne på sagen. Læg et svar.
Avatar billede mikkelbm Nybegynder
21. marts 2006 - 13:43 #12
Super...
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