User Tools

Site Tools


swing:panels

Panels

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

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

Ο παρακάτω κώδικας δίνει ένα παράδειγμα, όπου προστίθεται στο κεντρικό panel (διάταξη BorderLayout), ένα 2ο panel στη θέση SOUTH, στο οποίο περιέχονται 2 κουμπιά. Το 2ο panel έχει την default διάταξη FlowLayout.

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);
  }
}
Προηγούμενο: ComboBoxes Περιεχόμενα Επόμενο: Layout Managers
swing/panels.txt · Last modified: 2018/04/13 08:44 (external edit)