Я пытаюсь сделать игру для одного из моих классов, но у меня возникают проблемы с реализацией некоторых вещей, которые я хочу сделать. По сути, я хочу, чтобы несколько разных частей находились внутри одного и того же графического окна пользовательского интерфейса.
Насколько я понимаю, я бы использовал 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
Я хочу, чтобы в каждой части была отдельная панель, если это хороший способ. Таким образом, с двумя боковыми прямоугольниками в виде панелей и центральной квадратной панели и четвертой панелью для коричневого текстового поля, находящегося внутри средней площади.
Будет ли это достойным способом?
(Кроме того, любые советы о том, что я должен улучшить для моего вопроса в целом, были бы хорошими.)
что положить в 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 о том, как использовать границы для получения дополнительной информации.
Если я правильно предполагаю, возникает вопрос, как использовать разные 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
}
JFrame
,JPanel
и т. Д., Если вы не предоставляете дополнительную функциональность.this.setLayout(new BorderLayout())