【问题标题】:GridLayout ButtonPanel not Displaying Rows/Columns specifiedGridLayout ButtonPanel 未显示指定的行/列
【发布时间】:2017-10-20 03:06:46
【问题描述】:

所以这段代码明确表示JPanelselectPanel 应该有三行一列,但是,当我运行它时,我得到了这个结果,只是无法弄清楚我做错了什么。大部分代码与我认为的问题无关。开头是我制作给我带来问题的面板(selectPanel),结尾是将该面板添加到 JFrame 的地方(roiguide)。

代码结果:

    JPanel selectPanel = new JPanel();
    selectPanel.setLayout(new GridLayout(3,1,0,0));
    selectPanel.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));

    imp.getWindow().toFront();
    IJ.setTool(Toolbar.RECTANGLE);

    referenceButton = new JButton("Add reference region");
    referenceButton.setEnabled(true);
    referenceButton.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            refDefine();
        }
    });
    refLabel = new JLabel(" ("+printformat.format(rno)+"/1)");
    selectPanel.add(referenceButton);
    selectPanel.add(refLabel);

    backgroundButton = new JButton("Add background region");
    backgroundButton.setEnabled(true);
    backgroundButton.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            brDefine();
        }
    });
    backgroundLabel = new JLabel(" ("+printformat.format(bno)+"/"+printformat.format(spotno)+")");
    selectPanel.add(backgroundButton);
    selectPanel.add(backgroundLabel);

    spotButton = new JButton("Add spot");
    spotButton.setEnabled(true);
    spotButton.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            spotDefine();
        }
    });
    spotLabel = new JLabel(" ("+printformat.format(sno)+"/"+printformat.format(spotno)+")");
    selectPanel.add(spotButton);
    selectPanel.add(spotLabel);

    JPanel editPanel = new JPanel();
    selectPanel.setLayout(new GridLayout(2,1,20,20));
    selectPanel.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));

    jComboBox1 = new JComboBox();
    editPanel.add(jComboBox1);

    JButton editButton = new JButton("Edit ROIs");
    editButton.setEnabled(true);
    editButton.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            String item = (String) jComboBox1.getSelectedItem();
            Roi roi = overlay.get(overlay.getIndex(item));
        }
        });
    editPanel.add(editButton);

    // Create the buttonPanel, which has the "Cancel" and "OK" buttons
    JPanel buttonPanel = new JPanel();
    buttonPanel.setLayout(new GridLayout(1,2,20,20));
    buttonPanel.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
    JButton cancelButton = new JButton("Cancel");
    cancelButton.setEnabled(true);
    cancelButton.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            didCancel = true;
            roiguide.dispose();
            overlay.clear();
        }
    });
    buttonPanel.add(cancelButton);

    JButton okButton = new JButton("OK");
    okButton.setEnabled(true);
    okButton.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            if(current!=roino){
                IJ.error("ROI Manager","Please select " + roino + " regions of interest.");
            }else{
                canContinue=true;
                roiguide.dispose(); 
            }
        }
    });
    buttonPanel.add(okButton);

    // Create and populate the JFrame
    roiguide = new JFrame("Add regions of interest:");
    roiguide.getContentPane().add(selectPanel, BorderLayout.NORTH);
    roiguide.getContentPane().add(editPanel, BorderLayout.WEST);
    roiguide.getContentPane().add(buttonPanel, BorderLayout.EAST);
    roiguide.pack();
    roiguide.setLocation(400,400);
    roiguide.setVisible(true);
    roiguide.setResizable(false);

【问题讨论】:

  • Most of this code is not relevant to the problem I think. - 你说得对。您的问题是关于组件的布局。那么,你为什么要编写一个完整的类而不进行基本测试呢?创建一个适当的minimal reproducible example 发布。很有可能你会发现问题。因此,您只需要一个带有使用 GridLayout 的面板的 JFrame 和要添加到面板的 3 个组件。如果这不起作用,那么您可以发布一个简单/完整的课程。首先让它工作,然后转到下一步并添加另一个面板。一旦面板正确显示,您就开始添加 ActionListener。
  • 附带说明,在进行 pack() 操作之前,应将框架设置为不可调整大小,否则大小将不正确,因为边框大小会发生变化。
  • @camickr 它在整个测试过程中都能正常运行,并且添加的新功能破坏了原始功能的显示。不过我会按照你说的调试,谢谢。

标签: java swing layout-manager grid-layout


【解决方案1】:

新功能的添加打破了显示

那么你知道你改变了什么,所以你应该知道从哪里开始寻找:

这看起来很可疑:

JPanel editPanel = new JPanel();
selectPanel.setLayout(new GridLayout(2,1,20,20));

【讨论】:

  • 哦,非常感谢。复制粘贴以节省语法时间,显然反复忽略了那个错误。
猜你喜欢
  • 1970-01-01
  • 2017-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-10
  • 1970-01-01
  • 2019-04-08
  • 2017-01-15
相关资源
最近更新 更多