2 Stimmen

JFrame-Layout mit JPanels

Ich habe Probleme beim Layout meines JFrame. Ich versuche die ToolBar oben hinzuzufügen, dann darunter Info, dann Farbe rechts unten, dann Kopien in der Mitte, dann die Drucktaste links und dann die Druckerliste unten. Wenn mir jemand in die richtige Richtung helfen könnte, wäre das toll.

// Deklariere GUI-Komponenten hier
// Eine JToolBar & JButton
private JPanel mainPanel;
private JPanel detailPanel;
private JPanel toolBarPanel;
private JToolBar jToolbar;
private JButton jbtAdmin, jbtHelp;

   // Ein JPanel namens infoPanel & JLabel
    private JPanel infoPanel;
    private JLabel jlblOne;

   // Ein JPanel namens colourPanel
    private JPanel colourPanel;
    private JRadioButton bwRadioButton, colourRadioButton;
    private ButtonGroup btg;

   // Ein JPanel namens noCopiesPanel
    private JPanel noCopiesPanel;
    private JLabel jlbCopies;
    private JTextField jtfCopies;

// Ein JPanel namens printerPanel
private JPanel printerPanel;
private JComboBox printerBox;

private JButton jbtPrint;

// Konstruktor - Setze Layout & füge Komponenten hinzu...
// Der Konstruktor nimmt den ausgewählten Schüler entgegen und weist ihn currentStudent zu
public StudentFrame(Student studentIn){
    // Setze aktuellen Schüler ein
    currentStudent=studentIn;

  // Rüste Toolbar auf & füge jbtAdmin hinzu
  toolBarPanel = new JPanel();
   toolBarPanel.add(jToolbar = new JToolBar());
   jToolbar.add(jbtAdmin = new JButton("Admin"));
  jToolbar.add(jbtHelp = new JButton("Hilfe"));

  // Rüste infoPanel auf
    infoPanel = new JPanel();
    infoPanel.add(jlblOne = new JLabel(currentStudent.toString(), JLabel.CENTER));

  // Rüste colourPanel mit RadioButtons aus
    colourPanel = new JPanel(new GridLayout(2,1));
    colourPanel.add(bwRadioButton = new JRadioButton("Schwarz-Weiß", true));
    colourPanel.add(colourRadioButton = new JRadioButton("Farbe"));
    btg = new ButtonGroup();
    btg.add(bwRadioButton);
    btg.add(colourRadioButton);
    // Setze einen TitledBorder darum
    colourPanel.setBorder(new TitledBorder("Farbe"));

  // Rüste noCopiesPanel auf
    noCopiesPanel = new JPanel(new GridLayout(1,2));
    noCopiesPanel.add(jlbCopies = new JLabel("Kopien"));
    noCopiesPanel.add(jtfCopies = new JTextField(3));
    noCopiesPanel.setBorder(new TitledBorder("Drucken"));

    // Rüste jbtPrint JButton auf
    jbtPrint = new JButton("Drucken",new ImageIcon("Images/printerIcon.png"));
    jbtPrint.setHorizontalTextPosition(JButton.CENTER);
    jbtPrint.setVerticalTextPosition(JButton.TOP);
    jbtPrint.setFont(new Font("Helvetica", Font.BOLD, 30));
    jbtPrint.setBackground(Color.LIGHT_GRAY);
    jbtPrint.setMnemonic('D');

    // Rüste printerPanel auf
    printerPanel = new JPanel();
    String[] printerList = {"Drucker 24001", "Drucker 24002", "Drucker 24003", "Drucker 24004"};
    printerPanel.add(printerBox = new JComboBox(printerList));
    printerPanel.setBorder(new TitledBorder("Drucker"));

  detailPanel = new JPanel(new GridLayout(2,1));
  detailPanel.add(infoPanel, BorderLayout.NORTH);
    detailPanel.add(colourPanel, BorderLayout.WEST);
    detailPanel.add(noCopiesPanel, BorderLayout.CENTER);
    detailPanel.add(jbtPrint, BorderLayout.EAST);
    detailPanel.add(printerPanel, BorderLayout.SOUTH);

  mainPanel = new JPanel();

  mainPanel.add(toolBarPanel, BorderLayout.NORTH);
    mainPanel.add(detailPanel, BorderLayout.SOUTH);
    this.add(mainPanel);
  //this.add(detailPanel);

3voto

Paul Samsotha Punkte 197171
detailPanel = new JPanel(new GridLayout(2,1));
detailPanel.add(infoPanel, BorderLayout.NORTH);

Sie haben das Layout als GridLayout, aber Sie versuchen, BorderLayout-Positionen festzulegen. Wenn Sie die Positionen festlegen möchten, setzen Sie das Layout von detailPanel auf BorderLayout


mainPanel = new JPanel();
mainPanel.add(toolBarPanel, BorderLayout.NORTH);

Genau wie oben in diesem Fall. JPanel hat ein Standardlayout FlowLayout. Sie müssen das Layout auf BorderLayout setzen.

Sie sollten auch das detailPanel dem CENTER des mainPanel hinzufügen.


Außerdem sollte ein JToolBar zu einem Container mit einem BorderLayout hinzugefügt werden

toolBarPanel = new JPanel();
toolBarPanel.add(jToolbar = new JToolBar());

Setzen Sie das toolBarPanel auf BorderLayout

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X