swing:panels

Table of Contents

Panels

Σε πραγματικές εφαρμογές θέλουμε να φτιάξουμε σύνθετα παράθυρα που έχουν πολλά διαφορετικά κουμπιά σε διαφορετικές περιοχές. Κάτι τέτοιο δεν μπορούμε να το κάνουμε μόνο με τα layouts που είδαμε προηγούμενα.

Ένας τρόπος για να φτιάξετε πολύπλοκα layouts είναι να χρησιμοποιήσετε Panels. Κάθε panel ανήκει στην κλάση JPanel. Αν και πρόκειται για μία από τις πιο απλές κλάσεις απόγονους της κλάση Container στην πραγματικότητα είναι μία εξαιρετικά χρήσιμη κλάση διότι μπορείτε να προσθέτετε Panels μέσα σε Panels ή Frames δημιουργώντας πολύπλοκες συνθέσεις παραθύρων. Για παράδειγμα, πως μπορείτε σε μία θέση ενός από τα layouts που παρουσιάσαμε να προσθέσετε δύο κουμπιά (π.χ. BorderLayout). Αυτό μπορείτε να το κάνετε μόνο εάν στη συγκεκριμένη θέση προσθέσετε ένα panel, το οποίο περιέχει τα δύο κουμπιά.

BorderLayoutPanelDemo.java
import javax.swing.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.*;
 
public class BorderLayoutPanelDemo extends JFrame {
  public BorderLayoutPanelDemo () {
    super();
    setSize(400, 150);
    setTitle("BorderLayout Demo");
    setLayout(new BorderLayout());
    setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
 
    ButtonListener listener = new ButtonListener();
 
    okCancelPanel(this);    
 
    JButton centerButton = new JButton("Close Window Button");
    centerButton.addActionListener( listener );
    add(centerButton, BorderLayout.CENTER);
  }
 
  private void okCancelPanel(Container container) {
    JPanel southPanel = new JPanel();
    southPanel.setLayout(new FlowLayout());
    container.add(southPanel,  BorderLayout.SOUTH);
 
    JButton cancelButton = new JButton("Cancel");    
    southPanel.add(cancelButton);
 
    JButton okButton = new JButton("OK!");
    southPanel.add(okButton);    
  }
 
  public class ButtonListener implements ActionListener {
    public void actionPerformed(ActionEvent e) {
      System.out.println(e);
      System.exit(1);
    }
  }
 
  public static void main(String[] args) {
    BorderLayoutPanelDemo w = new BorderLayoutPanelDemo();
    w.setVisible(true);
  }
}

JFrame Content Pane

Όπως προαναφέραμε η κλάση JFrame δημιουργεί το εξωτερικό παράθυρο με τα τρία κουμπιά (συνήθως πάνω δεξιά - εξαρτάται από το λειτουργικό σύστημα). Όμως το JFrame μήπως έχει και αυτό ένα Panel ή κάποιο αντικείμενο τύπου Container στο οποίο μπορούμε να προσθέτουμε άλλα Components. Το JFrame διαθέτει ένα Container το οποίο λαμβάνουμε από την μέθοδο public Container getContentPane().

swing/panels.txt · Last modified: 2016/02/26 11:15 (external edit)