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

gridbagconstraints不工作

微生俊名
2023-03-14

我使用gridbaglayout来显示JLabel(缩略图数量)和一些缩略图,每当我使用gridbaglayout将缩略图添加到Jpanel时,它会显示在中心,忽略网格值。gridx值工作正常,但gridy值被完全忽略。。。

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import javax.swing.*;


public class grid {

    private JFrame frame = new JFrame();

    private JLabel a = new JLabel("Welcome to PhotoAlbum55");

    /**
     * Create the frame.
     */
    public grid() {

        createAndShowGUI();

    }

    private void addComponentsToPane(Container pane) {

        SpringLayout layout = new SpringLayout();
        pane.setLayout(layout);

        layout.putConstraint(SpringLayout.WEST, a, 60, SpringLayout.WEST, pane);
        layout.putConstraint(SpringLayout.NORTH, a, 0, SpringLayout.NORTH, pane);       
        a.setFont(new Font("Segoe UI", Font.BOLD, 20));
        pane.add(a);

        JPanel photoPanel = new JPanel();
        GridBagLayout gbl = new GridBagLayout();
        photoPanel.setLayout(gbl);
        GridBagConstraints gbc = new GridBagConstraints();

        JScrollPane photoScroll = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); 
        photoScroll.setViewportView(photoPanel);
        pane.add(photoScroll);

        gbc.gridx = 0;
        gbc.gridy = 0;
        gbc.ipadx = 15;
        gbc.fill = GridBagConstraints.HORIZONTAL;

        JLabel photo = new JLabel();        
        Image img = new ImageIcon("C:\\Users\\Public\\Pictures\\Sample Pictures\\Desert.jpg").getImage();
        Image newimg = img.getScaledInstance(50, 50,  java.awt.Image.SCALE_SMOOTH);  
        ImageIcon newIcon = new ImageIcon(newimg); 
        photo.setIcon(newIcon);

        gbl.setConstraints(photo, gbc);                                 
        photoPanel.add(photo);

        JLabel photo1 = new JLabel();       
        Image img1 = new ImageIcon("C:\\Users\\Public\\Pictures\\Sample Pictures\\Lighthouse.jpg").getImage();
        Image newimg1 = img1.getScaledInstance(50, 50,  java.awt.Image.SCALE_SMOOTH);  
        ImageIcon newIcon1 = new ImageIcon(newimg1); 
        photo1.setIcon(newIcon1);

        gbc.gridx = 1;
        gbc.gridy = 0;
        gbc.ipadx = 15;
        gbc.fill = GridBagConstraints.HORIZONTAL;


        gbl.setConstraints(photo1, gbc);                                    
        photoPanel.add(photo1);







    //  photoPanel.setPreferredSize(new Dimension(900, 900));
        photoScroll.setPreferredSize(new Dimension(500, 500));


        layout.putConstraint(SpringLayout.WEST, photoScroll, 60, SpringLayout.WEST, a);
        layout.putConstraint(SpringLayout.NORTH, photoScroll, 100, SpringLayout.NORTH, a);


    }

    private void createAndShowGUI() { // Creating the GUI...

        frame.getContentPane().setBackground(Color.WHITE);

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setTitle("PhotoAlbum55");

        // Set up the content pane.
        addComponentsToPane(frame.getContentPane());

        frame.pack();
        frame.setSize(690, 622);
        frame.setLocationRelativeTo(null);
        frame.setResizable(true);
        frame.setVisible(true);

    }

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        SwingUtilities.invokeLater(new Runnable() {

            public void run() {

                try {

                    new grid();
                }

                catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
}

共有1个答案

司寇苗宣
2023-03-14

两个图像位于同一y坐标上,因此应用程序的行为符合预期。另一方面,x坐标不同,因此需要设置

gbc.weightx = 1;

以便定位。如果需要将图像添加到面板顶部,则需要将其固定在那里,并沿y轴设置权重:

gbc.anchor = GridBagConstraints.NORTH;
gbc.weighty = 1;
 类似资料:
  • 问题内容: 我正在尝试使用和约束来定位我的按钮。但是它们不起作用!如果更改和变量,则什么也不会发生。如果我将填充更改为,它仍然不起作用。 我在这里想念什么吗? 如果很难理解,这里就是问题所在: 问题答案: 自从我完成了挥杆布局以来已经有一段时间了,但是如果您的JPanel中有多个JComponent,则gridX和gridY不会仅具有效果吗?看来您只有一个JButton,所以GridBagLayo

  • 我目前已经用下面的代码创建了一个JFrame。我希望有三个JLabel,一个在另一个上面,它们对应的JTextFields在右边,下面有四个JButtons(我最终将使用插入来分隔它们)。但是,单元格在一行中在框架顶部对齐。谁能看出我正在犯的错误。多谢了。 它目前正在生产的JFrame是: **我意识到我没有在面板中设置GridBagLayout,所以添加了一行:

  • 我有一个从文件生成的面板。我不知道到底要添加多少字段和标签,我希望它包含两列label和field。我认为我可以通过GridBagLayout和GridBagConstraints来做到这一点,但我不知道如何做到这一点。有人知道如何从JPanel/JFrame中恢复GridBagConstraints吗? 如果没有,我们将非常感谢您提出的任何替代方案。

  • 问题内容: 我想这样布局我的JPane: 这样,顶部比底部更大/更小(顶部由另一个JPanel组成,并使用Graphics对象显示图像,而底部也由另一个JPanel组成,但使用Graphics对象绘制一些线和文字)。 我听说最好的方法是使用GridBagLayout和GridBagConstraints。 我试图找出GridBagConstraints的适当属性,但遇到了一些困难。这是我到目前为止

  • 我想在菜单栏文本被选中时更改它的颜色。 这里可能出了什么问题? 我尝试使用伪类':active',但没有得到应用。其中as':Hover'正在工作。 我还尝试使用'Router LinkActive',它应该添加类'Active-Link',但这也不起作用。 我在下面给出了HTML、SCCS和TS代码: