Панели Java GUI

1

Я пытаюсь сделать игру для одного из моих классов, но у меня возникают проблемы с реализацией некоторых вещей, которые я хочу сделать. По сути, я хочу, чтобы несколько разных частей находились внутри одного и того же графического окна пользовательского интерфейса.

Насколько я понимаю, я бы использовал JPanels для создания этих разных частей и поместил их в более крупный JPanel, верно ли я в этом?

У меня есть код здесь, но мне действительно нужна помощь только в том, что делать со всем этим.

public class FarkleWindow extends JFrame{

    private int windowWidth = 800;
    private int windowHeight = 600;

    private JPanel player1Dice, player2Dice, dicePanel, infoBox;
    private FarkleDisplay gameBoard;public FarkleWindow()
    {
        this.setTitle("Farkle!");
        this.setSize(windowWidth,windowHeight);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        inititalizeWindow();

        this.setVisible(true);

    }


    private void inititalizeWindow() {
        gameBoard = new FarkleDisplay();

        this.add(gameBoard, BorderLayout.CENTER);

        //addMenuOptions();

        player1Dice = new JPanel();
        gameBoard.add(player1Dice);

    }
}

Я хотел бы знать, что положить в initializeWindow() часть, чтобы создать разные части, и как бы я сказал, что они видны, как граница или цвет, или что-то просто увидеть, что оно есть.

Любая помощь будет оценена!

РЕДАКТИРОВАТЬ

Я читаю больше об этом, и, смотря на это, у меня больше вопросов. Могу ли я сделать JPanels определенными размерами, или это только через конкретное позиционирование, что я могу вместить все, что я хочу?

EDIT V2

Поэтому было сказано, что я должен добавить больше информации о том, какой тип я хочу использовать для интерфейса, и спасибо вам за помощь, которую у меня есть! Я по-прежнему привык к использованию и публикации в Stack Overflow, а не просто к поиску того, что я ищу на нем.

В основном то, что я собираюсь и собираюсь построить, похоже на этот макет

http://bestbackgammon.com/farkle/index_files/image001.jpg

Я хочу, чтобы в каждой части была отдельная панель, если это хороший способ. Таким образом, с двумя боковыми прямоугольниками в виде панелей и центральной квадратной панели и четвертой панелью для коричневого текстового поля, находящегося внутри средней площади.

Будет ли это достойным способом?

(Кроме того, любые советы о том, что я должен улучшить для моего вопроса в целом, были бы хорошими.)

  • 1
    Если вы опубликуете то, что пытаетесь достичь, мы сможем помочь вам выбрать лучшие макеты для работы. Кроме того, на самом деле мы мало что можем сделать, чего не охватывали бы учебники по Oracle Swing . Кроме того, обычно лучше не расширять JFrame , JPanel и т. Д., Если вы не предоставляете дополнительную функциональность.
  • 0
    вам нужно установить макет вашего JFrame с помощью команды this.setLayout(new BorderLayout())
Показать ещё 1 комментарий
Теги:
user-interface
swing
jpanel
jframe

2 ответа

1
Лучший ответ

что положить в initializeWindow() часть для создания различных частей,

player1Dice = new JPanel();
gameBoard.add(player1Dice);

Вы также можете сделать что-то вроде:

JPanel panel1 = new JPanel();
panel1.setBackground( Color.GREEN );
gameBoard.add(panel1);
JPanel panel2 = new JPanel();
panel2.setBackground( Color.BLUE );
gameBoard.add(panel2);

Конечно, увидеть нечего, потому что панель не содержит никаких компонентов. Ваш вопрос слишком расплывчатый, чтобы дать конкретный ответ.

и как бы я сказал, что они видны, как граница или цвет, или что-то просто, чтобы увидеть, что оно есть.

Вы можете добавить Border на панель. Что-то вроде:

panel.setBorder( BorderFactory.createLineBorder(Color.RED) ); 

Прочтите раздел из руководства Swing о том, как использовать границы для получения дополнительной информации.

  • 0
    Могу ли я установить конкретные размеры JPanel, или это определяется тем, что внутри них, или чем-то подобным?
  • 0
    Когда вы добавляете компоненты на панель, менеджер раскладки панели будет определять предпочтительный размер панели.
Показать ещё 1 комментарий
0

Если я правильно предполагаю, возникает вопрос, как использовать разные JPanles, в том же JFrame или другом JPanel, и как вы можете взаимодействовать с ними. Это сделано с Swing в NetBeans. Мне нравится использовать AbsoluteLayout, но не стесняйтесь использовать что-либо еще. У меня есть графический дизайнер, поэтому мне лучше.

package panels;

/**
 *
 * @author Agnosto Theo
 */
public class panels extends javax.swing.JFrame {

    /**
     * Creates new form panels
     */
    public panels() {
        initComponents();
        this.setLocationRelativeTo(null);
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        jPanel2 = new javax.swing.JPanel();
        jPanel3 = new javax.swing.JPanel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        getContentPane().setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());

        jPanel1.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        jPanel1.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                jPanel1MouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                jPanel1MouseExited(evt);
            }
        });

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 100, Short.MAX_VALUE)
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 100, Short.MAX_VALUE)
        );

        getContentPane().add(jPanel1, new org.netbeans.lib.awtextra.AbsoluteConstraints(120, 0, -1, -1));

        jPanel2.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        jPanel2.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                jPanel2MouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                jPanel2MouseExited(evt);
            }
        });

        javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
        jPanel2.setLayout(jPanel2Layout);
        jPanel2Layout.setHorizontalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 100, Short.MAX_VALUE)
        );
        jPanel2Layout.setVerticalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 100, Short.MAX_VALUE)
        );

        getContentPane().add(jPanel2, new org.netbeans.lib.awtextra.AbsoluteConstraints(230, 0, -1, -1));

        jPanel3.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        jPanel3.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                jPanel3MouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                jPanel3MouseExited(evt);
            }
        });

        javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
        jPanel3.setLayout(jPanel3Layout);
        jPanel3Layout.setHorizontalGroup(
            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 100, Short.MAX_VALUE)
        );
        jPanel3Layout.setVerticalGroup(
            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 100, Short.MAX_VALUE)
        );

        getContentPane().add(jPanel3, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 0, -1, -1));

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

    private void jPanel3MouseEntered(java.awt.event.MouseEvent evt) {                                     
        jPanel3.setBackground(java.awt.Color.DARK_GRAY);
    }                                    

    private void jPanel3MouseExited(java.awt.event.MouseEvent evt) {                                    
        jPanel3.setBackground(java.awt.Color.LIGHT_GRAY);
    }                                   

    private void jPanel1MouseEntered(java.awt.event.MouseEvent evt) {                                     
        jPanel1.setBackground(java.awt.Color.DARK_GRAY);
    }                                    

    private void jPanel1MouseExited(java.awt.event.MouseEvent evt) {                                    
        jPanel1.setBackground(java.awt.Color.LIGHT_GRAY);
    }                                   

    private void jPanel2MouseExited(java.awt.event.MouseEvent evt) {                                    
        jPanel2.setBackground(java.awt.Color.LIGHT_GRAY);
    }                                   

    private void jPanel2MouseEntered(java.awt.event.MouseEvent evt) {                                     
        jPanel2.setBackground(java.awt.Color.DARK_GRAY);
    }                                    

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(panels.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(panels.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(panels.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(panels.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new panels().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JPanel jPanel3;
    // End of variables declaration                   
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню