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

Scrollbar 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:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;
import java.text.DecimalFormat;
import javax.swing.event.*;
import java.rmi.*;
import java.net.*;
import java.util.*;
import javax.swing.*;

//Grænsefladen for ydelse

public class GUIYdelse extends JFrame {
  //Variable til udformning af grænsefladen
  private BorderLayout borderlayout;
  private Container container;
  private ControllerGUIYdelse controllerGUIYdelse;
  private String[] kolonneNavne = {"Beskrivelse", "Pris","Varetype"};
  private JButton[] buttons;
  private String[] type = {"Minibar", "Restaurant", "TV", "Telefon", "Facilitetsydelse", "Erstatsningsydelse", "Bar"};
  private int ydelser[] = {1,2};
  private String knapStreng[] = {"Opret", "Ændre", "Slet", "Hent", "Luk"};
  private JTable table;
  private JScrollPane scrollPane;
  private JPanel vestPanel;
  private JPanel[] vestInnerPanel;
  private String feltBeskrivelse[] = {"Beskrivelse :", "", "Pris :", "", "Varetype", "", "", "", "", "", "", "", "", "",""};
  private Component JComponent[] = {new JTextField(), new JLabel(), new JTextField(), new JLabel(), new JComboBox(type), new JLabel(), new JLabel(), new JLabel(), new JLabel(), new JLabel(), new JLabel(), new JLabel(), new JLabel(), new JLabel(), new JLabel()};
  private String layout[] = {BorderLayout.NORTH, BorderLayout.WEST, BorderLayout.CENTER, BorderLayout.EAST, BorderLayout.SOUTH};
  private ButtonHandler buttonhandler;
  private String GUINavn = "Ydelse";
  private int indlaestId;
  private JTextField felt[];
  private ColoredCell celle;
  private AttributiveCellTableModelYdelse YdelseModel;
  private ItemListener listen;
  private JComboBox cb = (JComboBox) JComponent[4];

  //Konstruktør
  public GUIYdelse(ControllerGUIYdelse controller) {
    //Controller sættes
    controllerGUIYdelse = controller;

    //metode kald til oprettelse af forskellige steder af grænsefladen
    opretVindue();
    opretLayout();
    opretNord();
    opretSyd();
    opretVest();
    opretOest();

    show();
  }

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

  //Bruges til indryk fra oven. dvs kun for udseendet
  private void opretNord() {
    container.add(new JLabel(" "), BorderLayout.NORTH);
  }

  //Bruges til indryk fra neden. dvs kun for udseendet
  private void opretSyd() {
    container.add(new JLabel(" "), BorderLayout.SOUTH);
  }

  //opretter den vestlige del af billedet med en JTabel
  private void opretVest() {
    opretTabel();

    //Tabellens egenskaber sættes
    table.setEnabled(false);
    table.setRowMargin(1);
    table.getTableHeader().setReorderingAllowed(false);
    table.getTableHeader().setBackground(Color.white.darker());

    scrollPane = new JScrollPane(table);

    container.add(scrollPane, BorderLayout.WEST);
  }

  //Østlige del af skærmen initialiseres
  private void opretOest() {
    vestInnerPanel = new JPanel[layout.length];

    for(int i = 0; i < vestInnerPanel.length; i++)
      vestInnerPanel[i] = new JPanel();

    //Østliges områder genereres ved metodekald
    opretOestNord();
    opretOestVest();
    opretOestCenter();
    opretOestOest();
    opretOestSyd();

    vestPanel = new JPanel(new BorderLayout());

    for(int i = 0; i < vestInnerPanel.length; i++) {
      vestPanel.add(vestInnerPanel[i], layout[i]);
    }

    container.add(vestPanel, BorderLayout.CENTER);
  }

  //JFramens layout initialiseres
  private void opretLayout() {
    borderlayout = new BorderLayout();

    container = getContentPane();
    container.setLayout(borderlayout);
  }

  //Tabellen oprettes
  public void opretTabel() {
    Hms2Ydelse RmiYdelse;
    Vector tabelAlleYdelser = controllerGUIYdelse.getTabelAlleYdelser();

    //Model med tabllens data initialiseres
    YdelseModel = new AttributiveCellTableModelYdelse(kolonneNavne, tabelAlleYdelser);

    //Instans initialiseres til at farve tabellens felter
    celle = (ColoredCell)YdelseModel.getCellAttribute();

    table = new JTable(YdelseModel);
  }

  //Label sættes nord i østdelen
  private void opretOestNord(){
    vestInnerPanel[0].add( new JLabel(GUINavn));
  }

  //Initialiserer gridlayout til JLabel med boksnavnene
  private void opretOestVest() {
    vestInnerPanel[1].setLayout(new GridLayout(15, 1));

    for(int i = 0; i < feltBeskrivelse.length; i++)
      vestInnerPanel[1].add(new JLabel("  " + feltBeskrivelse[i] + "  "));
  }

  //Initialiserer gridlayout med Componenter
  private void opretOestCenter() {
    vestInnerPanel[2].setLayout(new GridLayout(15, 1));

    for(int i = 0; i < JComponent.length; i++)
      vestInnerPanel[2].add(JComponent[i]);
  }

  //Bruges til indryk fra siden. dvs kun for udseendet
  private void opretOestOest() {
    vestInnerPanel[3].add( new JLabel("  "));
  }

  //Sydpanel initialiseres til knapperne
  private void opretOestSyd() {
    vestInnerPanel[4].setLayout(new GridLayout(3, 3));

    buttonhandler = new ButtonHandler();

    buttons = new JButton[knapStreng.length];
    for(int i = 0; i < knapStreng.length; i++) {
      buttons[i] = new JButton(knapStreng[i]);
      buttons[i].addActionListener(buttonhandler);
    }

    vestInnerPanel[4].add(buttons[0]);
    vestInnerPanel[4].add(buttons[1]);
    vestInnerPanel[4].add(buttons[2]);

    for(int i = 0; i < 3; i++)
      vestInnerPanel[4].add(new JLabel(" "));

    vestInnerPanel[4].add(buttons[3]);
    vestInnerPanel[4].add(new JLabel(" "));
    vestInnerPanel[4].add(buttons[4]);

    disableButtons();
  }

  //Enabling af knapper
  public void disableButtons() {
    for(int i = 1; i < 3; i++)
      buttons[i].setEnabled(false);
  }

  //Sætter værdier i boksene ved hentning
  public int setData(Hms2Ydelse RmiYdelse) {
    int id = -1;
    felt = new JTextField[5];

    try {
      felt[0] = (JTextField) JComponent[0];
      felt[2] = (JTextField) JComponent[2];
      felt[0].setText((RmiYdelse.getBeskrivelse()));
      felt[2].setText((String.valueOf(RmiYdelse.getPris())));
      cb.setSelectedIndex(RmiYdelse.getType()-1);
      id = RmiYdelse.getYId();
    }
    catch(RemoteException re) {re.printStackTrace();}
  return id;
  }

  //Indre klasse til event som sker på knapperne
  public class ButtonHandler implements ActionListener {
    public void actionPerformed( ActionEvent ae) {
    felt = new JTextField[5];
    felt[0] = (JTextField) JComponent[0];
    felt[2] = (JTextField) JComponent[2];

    //Knappen opret
    if(ae.getActionCommand() == knapStreng[0]) {

      //Validering
      if(felt[0].getText().equals("") || felt[2].getText().equals("")){
        HjaelpeMetoder.showMessage("Indtast i alle felterne");
      }
      else{

        //Validering
        if(HjaelpeMetoder.tjekString(felt[2].getText()) && Integer.parseInt( felt[2].getText()) > 0) {
          int ok = controllerGUIYdelse.opretYdelse(felt[0].getText(),Integer.parseInt(felt[2].getText()), cb.getSelectedIndex() + 1  );
          if(ok > 0) {
            HjaelpeMetoder.showMessage("Ydelsen" + felt[1].getText() +" er oprettet" );
          }
        }
        else HjaelpeMetoder.showMessage ("Der skal indtastes en tal i feltet Pris");
      }
    }

    //Knappen ændre
    else if(ae.getActionCommand() == knapStreng[1]) {

      boolean ok = controllerGUIYdelse.aendreYdelse(indlaestId, felt[0].getText(),Integer.parseInt(felt[2].getText()), cb.getSelectedIndex() +1 );
        if(ok) {
          int type = cb.getSelectedIndex();
          HjaelpeMetoder.showMessage("Ydelsen blev ændret.");
          felt[0].setText("");
          felt[2].setText("");
          disableButtons();
        }
        else
          HjaelpeMetoder.showMessage("Ydelsen blev ikke ændret. Prøv igen.");
        }

      //Knapppen slet
      if(ae.getActionCommand() == knapStreng[2]) {
        boolean ok = controllerGUIYdelse.sletYdelse(indlaestId);
        if (ok) {
          HjaelpeMetoder.showMessage("Ydeles med id " + indlaestId + " er slettet.");
          felt[0].setText("");
          felt[2].setText("");
          disableButtons();
        }
        else HjaelpeMetoder.showMessage("Vælg en Ydelse, prøv igen");
      }

      //Knappen hent
      else if(ae.getActionCommand() == knapStreng[3]) {
        int raekke = table.getSelectedRow();
        if(raekke >= 0) {
          indlaestId = setData( controllerGUIYdelse.getYdelseData(raekke) );
          for(int i = 1; i < 3; i++)
            buttons[i].setEnabled(true);
        }
        else
          HjaelpeMetoder.showMessage("Ingen facilitet valgt. Vælg en facilitet.");
      }

      //Knappen luk
      else if(ae.getActionCommand() == knapStreng[4])
        dispose();
    }
  }
}
Avatar billede funkyloonie Nybegynder
28. maj 2002 - 17:42 #1
forkert kode...
Avatar billede bearhugx Nybegynder
28. maj 2002 - 17:47 #2
Dette er forkert kode... Er spm 217398 så med den rigtige kode eller ?

Hvis så, så luk dette spørgsmål og tag pointsne selv :-)

/Søren Munk Skrøder

ref : http://www.eksperten.dk/spm/217382
Avatar billede funkyloonie Nybegynder
28. maj 2002 - 17:49 #3
ok. troede jeg havde lukket det. sorry.
Avatar billede funkyloonie Nybegynder
28. maj 2002 - 17:49 #4
og forresten TAK!
Avatar billede bearhugx Nybegynder
28. maj 2002 - 17:53 #5
OK :-)
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