JPanel в JFrame в NetBeans - PullRequest
       53

JPanel в JFrame в NetBeans

5 голосов
/ 30 января 2009

Я создал приложение Java (проект) в NetBeans, в котором я разработал JFrame со строкой меню и другие JPanels. Я хочу, чтобы эти JPanels появлялись внутри JFrame при действии различных пунктов меню, чтобы при каждом нажатии на пункты меню разные значения JPanels отображались внутри JFrame. Я спроектировал оба JFrame & JPanel по отдельности, но не смог связать их вместе.

Пожалуйста, помогите мне, друзья.

Ответы [ 7 ]

5 голосов
/ 30 января 2009

Вы можете использовать макет карты для этого. Макет карты может содержать много компонентов (в вашем случае JPanel), и вы можете переключаться между ними. Легко добавить макет карты в палитре NetBeans.

Doc:

http://java.sun.com/j2se/1.4.2/docs/api/java/awt/CardLayout.html

3 голосов
/ 10 мая 2009

Из одного из ваших комментариев видно, что вы хотите динамически создавать JPanels при нажатии кнопок. Если это так, то CardLayout не идеален. Относительно легко добиться того же эффекта самостоятельно. Код будет выглядеть примерно так:

public void actionPerformed(ActionEvent event) {
    Container contentPane = frame.getContentPane();
    contentPane.removeAll();
    contentPane.add(new YourPanel());
    contentPane.invalidate();
    contentPane.repaint();
}

Это предполагает, что изменяющаяся панель является единственным компонентом в кадре. Если это не так, добавьте JPanel с BorderLayout на панель содержимого в Matisse, а затем добавьте новые панели к этому, а не к панели содержимого.

1 голос
/ 20 апреля 2010

Сначала вы сохраните его как файл .java. Это основной класс jframe. Вы запускаете это первым. Затем вы видите, как внешняя панель добавляется в конструктор.

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * MainFrame.java
 *
 * Created on Apr 20, 2010, 5:20:26 PM
 */

package game;

import javax.swing.SwingUtilities;

/**
 *
 * @author S.M. Mahmudul hasan
 */
public class MainFrame extends javax.swing.JFrame {

    /** Creates new form MainFrame */
    public MainFrame() {
        initComponents();
        addPanel();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        firstPanel = new javax.swing.JPanel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        javax.swing.GroupLayout firstPanelLayout = new javax.swing.GroupLayout(firstPanel);
        firstPanel.setLayout(firstPanelLayout);
        firstPanelLayout.setHorizontalGroup(
            firstPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 457, Short.MAX_VALUE)
        );
        firstPanelLayout.setVerticalGroup(
            firstPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 398, Short.MAX_VALUE)
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(firstPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(firstPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
        );

        pack();
    }// </editor-fold>

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new MainFrame().setVisible(true);
            }
        });
    }

    private void addPanel() {
        MainPanel m=new MainPanel();
        this.getContentPane().remove(0);
        firstPanel.removeAll();
        javax.swing.GroupLayout firstPanelLayout = new javax.swing.GroupLayout(firstPanel);
        firstPanel.setLayout(firstPanelLayout);
        firstPanelLayout.setHorizontalGroup(
            firstPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(firstPanelLayout.createSequentialGroup()
                .addGap(78, 78, 78)
                .addComponent(m, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(79, Short.MAX_VALUE))

        );
        firstPanelLayout.setVerticalGroup(
            firstPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(firstPanelLayout.createSequentialGroup()
                .addGap(25, 25, 25)

                .addComponent(m, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGap(23, 23, 23))
        );
        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(firstPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(firstPanel, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );
        SwingUtilities.updateComponentTreeUI(this.getContentPane());
    }

    // Variables declaration - do not modify
    private javax.swing.JPanel firstPanel;
    // End of variables declaration

}

Класс панели:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * MainPanel.java
 *
 * Created on Apr 20, 2010, 5:21:03 PM
 */

package game;

import java.awt.Graphics;

/**
 *
 * @author S.M. Mahmudul hasan
 */
public class MainPanel extends javax.swing.JPanel {

    /** Creates new form MainPanel */
    public MainPanel() {
        initComponents();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        jLabel1 = new javax.swing.JLabel();

        setBorder(javax.swing.BorderFactory.createTitledBorder("paintable area"));

        jLabel1.setText("Paintable area");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(86, 86, 86)
                .addComponent(jLabel1)
                .addContainerGap(128, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(103, 103, 103)
                .addComponent(jLabel1)
                .addContainerGap(119, Short.MAX_VALUE))
        );
    }// </editor-fold>

  @Override public void paintComponent(Graphics g) {
         super.paintComponent(g);    // paints background
         g.drawString("shohan", 50, 100);
    }

    // Variables declaration - do not modify
    private javax.swing.JLabel jLabel1;
    // End of variables declaration

}
1 голос
/ 08 февраля 2009

Конструктор Matisse GUI имеет довольно хорошую поддержку элемента управления "JTabbedPane", если это то, что вы ищете. Вы можете перетащить контейнер TabbedPane в свои формы, а затем перетащить на него другие контейнеры, чтобы создать новые вкладки.

Если вы ищете более продвинутое поведение, такое как скрытие / отображение разных контейнеров, когда пользователь нажимает разные кнопки, вам нужно написать некоторый код; GUI строитель не оборудован, чтобы справиться с этим.

0 голосов
/ 23 июня 2012

Если вы действительно хотите сделать свой графический интерфейс более привлекательным, используйте JDesktopPane и посмотрите результат.

0 голосов
/ 30 апреля 2009

после смены панели в JFrame сделайте frameObj.pack ();

0 голосов
/ 08 февраля 2009

Если вы хотите, чтобы меню реагировали на щелчки, вам необходимо добавить Слушатели в пункты меню, которые в ответ отобразят правильную панель.

...