我的JPanel中的GridBagLayout无法正常工作

罗布森021

我有一个扩展JPanel的类有问题。在基于JFrame的游戏中,我在程序运行时交换了几个JPanel(登录面板,新的acc表单面板等...全部在一个JFrame中)。我想切换到具有GBL的面板,但是不幸的是,它不能很好地显示内容...它仅在屏幕中央显示ChatBox(JTextArea)和键入字段(JTextField),但我想将它们放在旁边其他。

public class InGameMenu extends JPanel 

    private JTextArea chatBox;
    private JPanel buttonPanel;
    private TextField chatTextField;
    private JList playersList;
    private DefaultListModel listModel;
    private ConnectionToServer conn;
    private JFrame mainFrame;

    public InGameMenu (ConnectionToServer conn, JFrame mainFrame) 
    {   
        this.setBackground(Color.CYAN);
        this.conn = conn;
        this.mainFrame = mainFrame;
        mainFrame.setTitle("Game menu");        
        super.setLayout(new GridBagLayout());        
        chatBox = new JTextArea("This is player's chat.\n");

        GridBagConstraints gbc = new GridBagConstraints();

        // chat box
        gbc.gridheight = 10;
        gbc.gridwidth = 10;
        gbc.fill = GridBagConstraints.BOTH;
        gbc.gridx = 0;
        gbc.gridy = 0;        
        this.add(chatBox, gbc);

        // chat text field        
        chatTextField = new TextField("dsadasda");
        chatTextField.setBackground(Color.GRAY);
        gbc.gridheight = 1;
        gbc.gridy = 1;
        this.add (chatTextField, gbc);

        // lista graczy
        listModel = new DefaultListModel();
        playersList = new JList(listModel);

        gbc.gridheight = 15;
        gbc.gridwidth = 4;
        gbc.gridx = 1;
        gbc.gridy = 0;
        this.add (playersList, gbc);

        // panel przyciskow
        buttonPanel = new JPanel(new FlowLayout());       
        gbc.gridheight = 1;
        gbc.gridy = 1;
        this.add (buttonPanel, gbc);
    }
}
充满鳗鱼的气垫船

您对gridHeight和gridWidth常量的使用似乎已关闭,并且似乎期望使用GridBagLayout没有的功能。例如,您不必通过这种方式定义JTextArea的列大小和行大小。而是通过调用适当的构造函数或方法来设置文本组件的行大小和列大小以及JList的原型大小。例如:

import java.awt.*;
import javax.swing.*;

public class InGameMenu extends JPanel {

   private static final String[] EXAMPLE_TEXT = {"One", "Two", "Three"};
   private static final int COLUMNS = 40;
   private static final int ROWS = 20;
   private JTextArea chatBox;
   private JPanel buttonPanel;
   private TextField chatTextField;
   private JList playersList;
   private DefaultListModel listModel;
   // private ConnectionToServer conn;
   private JFrame mainFrame;

   // public InGameMenu (ConnectionToServer conn, JFrame mainFrame)
   public InGameMenu(JFrame mainFrame) {

      this.setBackground(Color.CYAN);
      // this.conn = conn;
      this.mainFrame = mainFrame;
      mainFrame.setTitle("Game menu");
      super.setLayout(new GridBagLayout());
      // chatBox = new JTextArea("This is player's chat.\n");
      chatBox = new JTextArea("This is player's chat.\n", ROWS, COLUMNS);

      GridBagConstraints gbc = new GridBagConstraints();

      // chat box
      // gbc.gridheight = 10;
      // gbc.gridwidth = 10;
      gbc.fill = GridBagConstraints.BOTH;
      gbc.gridx = 0;
      gbc.gridy = 0;
      // this.add(chatBox, gbc);
      chatBox.setWrapStyleWord(true);
      chatBox.setLineWrap(true);
      JScrollPane scrollPane = new JScrollPane(chatBox);
      this.add(scrollPane, gbc);


      // chat text field
      chatTextField = new TextField("dsadasda", COLUMNS);
      chatTextField.setBackground(Color.GRAY);
      // gbc.gridheight = 1;
      gbc.gridy = 1;
      this.add(chatTextField, gbc);

      // lista graczy
      listModel = new DefaultListModel();
      for (int i = 0; i < EXAMPLE_TEXT.length; i++) {
         listModel.addElement(EXAMPLE_TEXT[i]);
      }
      playersList = new JList(listModel);
      playersList.setPrototypeCellValue(String.format("%40s", " "));

      // gbc.gridheight = 15;
      // gbc.gridwidth = 4;
      gbc.gridx = 1;
      gbc.gridy = 0;
      this.add(playersList, gbc);

      // panel przyciskow
      buttonPanel = new JPanel(new FlowLayout());
      // gbc.gridheight = 1;
      gbc.gridy = 1;
      this.add(buttonPanel, gbc);

   }

   public InGameMenu() {
      // TODO Auto-generated constructor stub
   }

   private static void createAndShowGui() {

      JFrame frame = new JFrame("In Game Menu");
      InGameMenu mainPanel = new InGameMenu(frame);
      frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
      frame.getContentPane().add(mainPanel);
      frame.pack();
      frame.setLocationByPlatform(true);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGui();
         }
      });
   }
}

现在,如果要让组件填充视图,则需要将weightx和权重GridBagConstraints设置为非零值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

GridBagLayout无法正常工作

来自分类Dev

GridBagLayout无法正常工作

来自分类Dev

GridBagLayout无法正常工作?

来自分类Dev

JPanel中的GLCanvas无法正常工作

来自分类Dev

为什么我的Jpanel borderlayout无法正常工作?

来自分类Dev

在我的htaccess中,RewriteRule无法正常工作

来自分类Dev

AWK在我的系统中无法正常工作

来自分类Dev

我在setAttribute中的事件无法正常工作

来自分类Dev

在jQuery中,我的功能无法正常工作

来自分类Dev

我在php中的登录无法正常工作

来自分类Dev

无法让我的 html 中的链接正常工作

来自分类Dev

Java Jpanel setBounds无法正常工作

来自分类Dev

加载图像到JPanel无法正常工作

来自分类Dev

JPanel setColor() 重复无法正常工作还是我做错了什么?

来自分类Dev

我无法在jquery中添加类无法正常工作

来自分类Dev

Java Swing:无法使用 GridBagLayout 在整个 JPanel 中传播组件

来自分类Dev

.not()对我来说无法正常工作

来自分类Dev

我的htaccess无法正常工作

来自分类Dev

使我的for循环无法正常工作

来自分类Dev

我的程序无法正常工作

来自分类Dev

我无法使phpseclib正常工作

来自分类Dev

我无法使addEventListener正常工作

来自分类Dev

无法使我的导航正常工作

来自分类Dev

我的表格无法正常工作

来自分类Dev

我的程序无法正常工作

来自分类Dev

我的if / else无法正常工作

来自分类Dev

我的WiFi无法正常工作

来自分类Dev

我的crontab无法正常工作

来自分类Dev

我的 jQuery 无法正常工作