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();
}
}
}
