当前位置: 首页 > 知识库问答 >
问题:

GridBagLayout不移动组件(无论输入了什么值)?

王旺
2023-03-14

编辑:增加导入和主方法

编辑2:原来我认为x和y值是像素,这是它不能工作的原因

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;
public class HomeScreenUI {
    
      public void addobjects(Component componente, Container yourcontainer, GridBagLayout layout, GridBagConstraints gbc, int gridx, int gridy, int gridwidth, int gridheight){

            gbc.gridx = gridx;
            gbc.gridy = gridy;

            gbc.gridwidth = gridwidth;
            gbc.gridheight = gridheight;

            layout.setConstraints(componente, gbc);
            yourcontainer.add(componente);
        }
    HomeScreenUI(){
        //frame
        
        JFrame frame = new JFrame("Opisa");

        //panels, one before button click and one after
        JPanel panel = new JPanel();
        JPanel panelAfterButtonClick = new JPanel();
        GridBagLayout ourlayout;
        
        ourlayout = new GridBagLayout();
        panel.setLayout(ourlayout);
        panelAfterButtonClick.setLayout(ourlayout);
        
        GridBagConstraints gbc = new GridBagConstraints();

        //jlabel that isnt displaying + dimensions
        JLabel label = new JLabel("Opisa");
        label.setFont(new Font("Helvetica", Font.PLAIN, 70));
        //second jlabel that isn't displaying
        JLabel label2 = new JLabel("Home");
        label2.setFont(new Font("Helvetica", Font.PLAIN, 70));
        
        //adding the labels to the panels
        panel.add(label);
        panelAfterButtonClick.add(label2);
        
        //button that is displaying both before and after
        JButton button = new JButton("Click Me..");
        JButton buttonAfterClick = new JButton("Clicked Me..");
        
        //adding the buttons to the jpanel
        this.addobjects(label, panel, ourlayout, gbc, 0,0, 3, 1);
        this.addobjects(button, panel, ourlayout, gbc, 700, 100, 2, 0);

        this.addobjects(label2, panelAfterButtonClick, ourlayout, gbc, 200, 200, 1, 1);
        this.addobjects(buttonAfterClick, panelAfterButtonClick, ourlayout, gbc, 700, 10, 2, 0);
        
        //function that changes the panel after the button is clicked
        button.addActionListener(new ActionListener() {

              public void actionPerformed(ActionEvent event) {
                  frame.setContentPane(panelAfterButtonClick);
                  frame.invalidate();
                  frame.validate();
              }

            });
        //adding the panel to the frame and setting the size
        frame.add(panel);
        frame.setSize(720,1280);
        frame.setVisible(true);
    }
}
public static void main (String args[]) {
        HomeScreenUI hs = new HomeScreenUI();
}

共有1个答案

宗政博
2023-03-14

看来您使用的GridBagLayout与设计时完全不同。注意,您有一个GridBagLayout实例,但希望将其用于两个面板。每个面板都需要有自己的LayoutManager实例

然后看看你有多少GridBagConstraints。要添加的每个组件都需要它自己的实例来正确管理。

然后,您会向GridBagConstraints传递一些奇怪的值。我建议您花点时间,看看如何使用GridBagLayout。

 类似资料:
  • 嗨,我是java初学者,正在使用GridBagLayout制作小型GUI。请参阅附带的代码和输出。我想要的是按照gridx和gridy中分配的位置将JButtons放置在左上角。但它把组件放在中心,而不是像预期的左上角,如果我使用插图,gridx/Gridy所有的工作,但不是从适当的坐标,所以请看附上的代码和图像,并指导我关于它 输出:想要左上角的按钮,请指点

  • 我正在尝试创建包含某些值的表的Excel文件。问题是,无论我做什么,Java都会创建损坏的Excel文件(.xlsx、.xlsm)。 更改现有表的列文件的名称已损坏,如果不进行修复,则无法打开它。名称已更改,但由于某些原因,必须修复该文件。创建新表或为现有表创建新列似乎会损坏文件,但我不知道为什么。 这是我的全部代码: 附言:我是Java初学者——我在Java上有三年的Rest时间。我为我的语言道

  • 在我的应用程序(,出现了一个向上箭头,表示,但我无法处理它来执行任何操作,甚至无法显示toast。我尝试了这个方法,并在选项ItemSelected()中处理了开关(item.getItemId()),但这两种解决方案都不适合我。我错过了一些东西,但不知道是什么。 这是我的代码: ... 我的整个选项项已选定: 我不知道其他代码是否重要: 在我的清单中,我没有父母活动。 我找到了这个答案,它似乎是

  • 试图将我的旁边的表单与对齐,我正在努力将组件放到面板顶部。我需要价格标签和字段就在商品标签和字段下面,但我无法让它从面板底部移动。 如果我使用,这会将项目标签和字段移到顶部,但随后我就失去了用锚定它的能力。除非有办法两者兼得?请看我试图展示我想要放置表格的区域的图片。谢谢你的帮助。