Avatar billede funkyloonie Nybegynder
28. maj 2002 - 17:44 Der er 5 kommentarer og
1 løsning

JScrollbar på Jframe

Jeg har en gui som dynamisk genererer rækker med cjeck buttons hele vejen ned. Det kan ske at der kommer mange og jeg vil derfor gerne have tilføjet en scrollbar. Hvordan gør jeg?

Min JFrame ser sådan ud:

public class GUIVaerelsesReservation extends JFrame {
  //Variable til udformning af grænsefladen
  private ControllerGUIVaerelsesReservation controllerGUIVaerelsesReservation;
  private Container container;
  private Component[] component = { new JCheckBox(), new JCheckBox(), new JCheckBox(), new JTextField()};
  private JCheckBox cb[];
  private JTextField tf[];
  private Vector ledigeVaerelser;
  private String[] kolonnenavne = {"Værelse", "Ankommet", "Ekstra opredning", "Kommentar"};
  private ButtonHandler buttonhandler;
  private String GUINavn = "Værelsesreservation";
  JScrollBar jScrollBar1 = new JScrollBar();

  //Konstruktør
  public GUIVaerelsesReservation(ControllerGUIVaerelsesReservation controller) {
    //Controller sættes
    controllerGUIVaerelsesReservation = controller;

    opretVindue();

    //Hele konstruktøren opretter grænsefladens visuelle elementer
    ledigeVaerelser = controllerGUIVaerelsesReservation.getLedigeVaerelser();
    cb = new JCheckBox[ledigeVaerelser.size() * 3];
    tf = new JTextField[ledigeVaerelser.size()];
    container = getContentPane();
   
    container.setLayout( new GridLayout(ledigeVaerelser.size() + 2,4));

    for(int i = 0; i < kolonnenavne.length ; i++)
      container.add(new JLabel(kolonnenavne[i]));

    Hms2Vaerelse RmiVaerelse;
    for(int j = 0; j < ledigeVaerelser.size(); j++) {
      RmiVaerelse = (Hms2Vaerelse) ledigeVaerelser.elementAt(j);

      for(int i = 0; i < 3; i++) {
        cb[(j * 3) + i] = new JCheckBox();
        try {
          if(i == 0)
            cb[(j * 3) + i].setText(""+RmiVaerelse.getVaerelsenr());
          container.add(cb[(j * 3) + i]);
        }
      catch (RemoteException re) {re.printStackTrace();}
      }
      tf[j] = new JTextField();
      container.add(tf[j]);
    }

    JButton fortryd = new JButton("Fortryd");
    JButton opret = new JButton("Opret");
    buttonhandler = new ButtonHandler();

    fortryd.addActionListener(buttonhandler);
    opret.addActionListener(buttonhandler);

    container.add( opret );
    container.add( new JLabel());
    container.add( new JLabel());
    container.add( fortryd );

    show();
  }

  private void opretVindue() {
    this.setTitle("HotelManager 2002 - " + GUINavn);
    this.setResizable(false);
    java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
    this.setIconImage(this.getToolkit().getImage("hms.gif"));
    this.setSize(new java.awt.Dimension(750,470));
    this.setLocation( (screenSize.width-this.getWidth()) / 2, (screenSize.height - this.getHeight()) / 2);
  }

  //Actionlistener på knapperne
  public class ButtonHandler implements ActionListener {
    public void actionPerformed( ActionEvent ae) {

      //Opret knappen
      if(ae.getActionCommand().equalsIgnoreCase( "Opret")) {
        boolean vaerelseValgt = false;
        //Tjekker om der er nogle værelser der er valgt.
        System.out.println(""+ledigeVaerelser.size());
        for(int i = 0; i < ledigeVaerelser.size(); i++) {
          System.out.println(i);
          if(cb[i * 3].isSelected())
            vaerelseValgt = true;
          System.out.println(i);
        }

        //validerer på foregående kommentar og ved true oprettes reservation + værelsesreservationer
        if(vaerelseValgt) {
          controllerGUIVaerelsesReservation.opretReservation();
          Hms2Vaerelse vaerelse;
          for(int i = 0; i < ledigeVaerelser.size(); i++) {
            vaerelse = (Hms2Vaerelse) ledigeVaerelser.elementAt(i);
            if(cb[i * 3].isSelected())
              controllerGUIVaerelsesReservation.opretVaerelsesReservation(vaerelse, cb[(i * 3) + 1].isSelected(), cb[(i * 3) + 1].isSelected(), tf[i].getText());
          }
          HjaelpeMetoder.showMessage("Reservationen er oprettet med valgte værelser.");
        }
        else
          HjaelpeMetoder.showMessage("Ingen værelser valgt.");
      }
      else if(ae.getActionCommand().equalsIgnoreCase("Fortryd"))
        dispose();
    }
  }
}
Avatar billede bearhugx Nybegynder
28. maj 2002 - 17:52 #1
du placerer alle dine komponenter på ContentPane ???

Mit foreslag :
- Placer alle koponenter på en JPanel
- Placer JPanel i et JScrollPane
- Placer JScrollPane på ContentPane

/Søren
Avatar billede el_gnu Nybegynder
28. maj 2002 - 17:52 #2
i stedet for at tilføje dine check boxe direkte til din JFrame, så lav en JScrollPane og tilføj dem til den i stedet. Denne scroll pane kan du så tilføje til din JFrame
Avatar billede el_gnu Nybegynder
28. maj 2002 - 17:56 #3
Avatar billede bearhugx Nybegynder
28. maj 2002 - 18:04 #4
Her er koden, hvor der bruges et JPanel til at holde tingene i samt et JScrollPane til at scrolle med....

Den skulle kunne erstatte din GUIVaerelsesReservation-konstruktør

Der er oprettet et JPanel, ved navn 'content' og et JScrollPane ved navn 'scrollableContent'

Alle referencer til 'container' er nu blevet udskiftet med 'content' og 'scrollableContent' bliver påsat 'container' til sidst

//Controller sættes
    controllerGUIVaerelsesReservation = controller;

    opretVindue();

//Hele konstruktøren opretter grænsefladens visuelle elementer
ledigeVaerelser = controllerGUIVaerelsesReservation.getLedigeVaerelser();
cb = new JCheckBox[ledigeVaerelser.size() * 3];
tf = new JTextField[ledigeVaerelser.size()];
container = getContentPane();

//******
  JPanel content = new JPanel();
  JScrollPane scrollableContent = new JScrollPane(content);
//******   

    content.setLayout( new GridLayout(ledigeVaerelser.size() + 2,4));

    for(int i = 0; i < kolonnenavne.length ; i++)
      content.add(new JLabel(kolonnenavne[i]));

    Hms2Vaerelse RmiVaerelse;
    for(int j = 0; j < ledigeVaerelser.size(); j++) {
      RmiVaerelse = (Hms2Vaerelse) ledigeVaerelser.elementAt(j);

      for(int i = 0; i < 3; i++) {
        cb[(j * 3) + i] = new JCheckBox();
        try {
          if(i == 0)
            cb[(j * 3) + i].setText(""+RmiVaerelse.getVaerelsenr());
          content.add(cb[(j * 3) + i]);
        }
      catch (RemoteException re) {re.printStackTrace();}
      }
      tf[j] = new JTextField();
      content.add(tf[j]);
    }

    JButton fortryd = new JButton("Fortryd");
    JButton opret = new JButton("Opret");
    buttonhandler = new ButtonHandler();

    fortryd.addActionListener(buttonhandler);
    opret.addActionListener(buttonhandler);

    content.add( opret );
    content.add( new JLabel());
    content.add( new JLabel());
    content.add( fortryd );
    container.add( scrollableContent );

    show();

/Søren
Avatar billede funkyloonie Nybegynder
28. maj 2002 - 18:29 #5
Tak for hjælpen. nu virker det.
Avatar billede bearhugx Nybegynder
28. maj 2002 - 18:32 #6
glad to be of service :-) og takker for points...
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