尝试使用 GridLayout 向 JPanel 添加滚动条,但 JCheckBoxes 只是变小了
Trying to add a scrollbar to a JPanel with GridLayout, but the JCheckBoxes just get made smaller instead
所以我试图在 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
您的问题与代码中的以下几行有关:
scrollPane.setBounds(50, 30, 300, 50);
您应该不在使用布局时设置静态大小和位置。您在将 scrollPane
添加到 contentPane
的 center
之前告诉了它的具体大小和位置。这两个有冲突。
下一个问题是关于这一行的:
frame.add(panel);
此行会将 panel
从 JScrollPane
中分离出来,并将其直接添加到 JFrame
的 contentPane
。
通过deleting/commenting这几行,你的问题就解决了。
所以我试图在 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
您的问题与代码中的以下几行有关:
scrollPane.setBounds(50, 30, 300, 50);
您应该不在使用布局时设置静态大小和位置。您在将 scrollPane
添加到 contentPane
的 center
之前告诉了它的具体大小和位置。这两个有冲突。
下一个问题是关于这一行的:
frame.add(panel);
此行会将 panel
从 JScrollPane
中分离出来,并将其直接添加到 JFrame
的 contentPane
。
通过deleting/commenting这几行,你的问题就解决了。