【问题标题】:Trying to add a scrollbar to a JPanel with GridLayout, but the JCheckBoxes just get made smaller instead尝试使用 GridLayout 向 JPanel 添加滚动条,但 JCheckBoxes 只是变得更小了
【发布时间】:2016-01-13 11:20:02
【问题描述】:

所以我正在尝试在 Java 中设置一个包含复选框列表的 Gui。决定列表长度的是突出显示的复选框。但是,当我向列表中添加更多内容时,复选框会变小以适合面板。我添加了一个垂直滚动条,但这并没有做任何事情。我必须做些什么来阻止 GridLayout 调整它所拥有的大小还是布局错误?

   package darrt;

import java.awt.BorderLayout;
import java.awt.GridLayout;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

public class TestForScrollBat {

    public static void main(String[] args){
        new TestForScrollBat();
    }
    public TestForScrollBat(){

        JFrame frame = new JFrame();
        JPanel panel = new JPanel(new GridLayout(0, 1));
        JScrollPane scrollPane = new JScrollPane(panel, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

        scrollPane.setBounds(50, 30, 300, 50);
        frame.getContentPane().add(scrollPane, BorderLayout.CENTER);

        JLabel label = new JLabel("           Soc Categories");

        JCheckBox soc1 = new JCheckBox("Blood and Lymphatic System Disorder");
        JCheckBox soc2 = new JCheckBox("Cardiac Disorders");
        JCheckBox soc3 = new JCheckBox("Congenital, familial and Genetic Disorders");
        JButton jbtn = new JButton("Go!");
        panel.add(label);
        panel.add(soc1);
        panel.add(soc2);
        panel.add(soc3);
        panel.add(jbtn);
        frame.add(panel);

        frame.pack();


      frame.setVisible(true);
    }
}

我之前有它,它会在这个面板上添加一个滚动,但现在它甚至不这样做..它只是在 JFrame 上创建一个新的 JPanel

【问题讨论】:

  • 您的代码有错误并且无法编译,因为它没有找到像:Lists 和 testmain 这样的变量。请您提供一个最小的、可运行的代码来显示您的问题吗?
  • 这个答案可能对您有所帮助。 A similar problem
  • @STaefi 好的,我现在已经重做了 :)
  • 您的最小代码现在很好!最少的好代码会得到最少的好答案;-)

标签: java swing user-interface jscrollpane


【解决方案1】:

您的问题与代码中的以下几行有关:

scrollPane.setBounds(50, 30, 300, 50);

您应该不在使用布局时设置静态尺寸和位置。您将特定的大小和位置告诉scrollPane,而您之前已将其添加到contentPane 的center。这两者是冲突的。

下一个问题是关于这一行的:

frame.add(panel);

此行会将panel 从您的JScrollPane 中分离出来,并将其直接添加到JFrame 的contentPane。

通过删除/评论这些行,您的问题将得到解决。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多