Java 面板没有';我不想滚动
我有这段代码(一个包含其他Java 面板没有';我不想滚动,java,swing,jscrollpane,jcomponent,Java,Swing,Jscrollpane,Jcomponent,我有这段代码(一个包含其他JComponents的面板,在本例中是JButtons)和一个问题 import javax.swing.*; import javax.swing.border.*; import java.awt.*; import java.util.*; public class JTagPanelTest extends JPanel{ public JTagPanelTest(){ setLayout(new FlowLayout(FlowLa
JComponent
s的面板,在本例中是JButton
s)和一个问题
import javax.swing.*;
import javax.swing.border.*;
import java.awt.*;
import java.util.*;
public class JTagPanelTest extends JPanel{
public JTagPanelTest(){
setLayout(new FlowLayout(FlowLayout.LEADING, 2, 0));
}
public void initializeTags(List<String> tags){
tags.forEach(tag -> add(new JButton(tag)));
}
public static void main(String[] args){
EventQueue.invokeLater(() -> {
try{
String lookAndFeelName = UIManager.getSystemLookAndFeelClassName();
UIManager.setLookAndFeel(lookAndFeelName);
}
catch(Exception e){
e.printStackTrace();
}
JTagPanelTest test = new JTagPanelTest();
test.initializeTags(Arrays.asList("one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten",
"012", "qwer", "z<xc", "rty", "poiu", "gfj", "zxcv", "mjnb", "mko", "nij", "bhu"));
JScrollPane scrollPane = new JScrollPane(test);
scrollPane.setHorizontalScrollBar(null);
test.setPreferredSize(new Dimension(200, 100));
// scrollPane.setPreferredSize(new Dimension(200, 180));
JFrame frame = new JFrame("Test");
frame.getContentPane().add(scrollPane, BorderLayout.CENTER);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(new Dimension(200, 180));
frame.setLocationRelativeTo(null);
frame.setResizable(false);
frame.setVisible(true);
});
}
}
import javax.swing.*;
导入javax.swing.border.*;
导入java.awt.*;
导入java.util.*;
公共类JTagPanelTest扩展了JPanel{
公共JTagPanelTest(){
setLayout(新的FlowLayout(FlowLayout.LEADING,2,0));
}
公共无效初始值标记(列表标记){
tags.forEach(tag->add(newjbutton(tag));
}
公共静态void main(字符串[]args){
EventQueue.invokeLater(()->{
试一试{
字符串lookAndFeelName=UIManager.getSystemLookAndFeelClassName();
UIManager.setLookAndFeel(lookAndFeelName);
}
捕获(例外e){
e、 printStackTrace();
}
JTagPanelTest=新的JTagPanelTest();
测试.初始化标记(数组.asList(“一”、“二”、“三”、“四”、“五”、“六”、“七”、“八”、“九”、“十”),
“012”、“qwer”、“z您尝试了正确的方法,在滚动窗格
上设置了首选大小
因此,请还原到该更改。它不滚动的原因是您的内容没有添加为垂直对齐。设置布局有助于垂直添加项目
例如:
test.setLayout(new BoxLayout(test, BoxLayout.Y_AXIS));
//test.setPreferredSize(new Dimension(200, 100));
scrollPane.setPreferredSize(new Dimension(200, 180));
通过在滚动窗格
上设置首选大小,您尝试了正确的方法
因此,请还原到该更改。它不滚动的原因是您的内容没有添加为垂直对齐。设置布局有助于垂直添加项目
例如:
test.setLayout(new BoxLayout(test, BoxLayout.Y_AXIS));
//test.setPreferredSize(new Dimension(200, 100));
scrollPane.setPreferredSize(new Dimension(200, 180));
我还发现它解决了垂直堆叠组件的问题。并且。我还发现它解决了垂直堆叠组件的问题。并且。我知道您希望按钮包装,因此您将它们添加到使用FlowLayout
布局管理器的JPanel
中。我还知道您希望包含这些按钮的JPanel
滚动。我通过设置JScrollPane
和包含这些按钮的JPanel
的首选大小来实现这一点,如下代码所示
导入java.awt.Dimension;
导入java.awt.EventQueue;
导入java.util.array;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入javax.swing.JScrollPane;
导入javax.swing.WindowConstants;
公共类BtnScrl实现可运行{
公开募捐{
showGui();
}
私有void showGui(){
JFrame=新JFrame(“BtnScrl”);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.add(createButtons());
frame.pack();
frame.setLocationByPlatform(真);
frame.setVisible(true);
}
私有JScrollPane createButtons(){
JPanel面板=新的JPanel();
面板。设置首选尺寸(新尺寸(400290));
对于(字符串标记:Arrays.asList(“一”),
“两个”,
“三”,
“四”,
“五个”,
“六”,
“七”,
“八”,
“九”,
“十”,
"012",
“qwer”,
"z我知道您希望按钮被包装,因此您可以将它们添加到使用FlowLayout
布局管理器的JPanel
中。我也知道您希望包含这些按钮的JPanel
滚动。我通过设置JScrollPane
和JPanel
的首选大小来实现这一点包含按钮,如下面的代码所示
导入java.awt.Dimension;
导入java.awt.EventQueue;
导入java.util.array;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入javax.swing.JScrollPane;
导入javax.swing.WindowConstants;
公共类BtnScrl实现可运行{
公开募捐{
showGui();
}
私有void showGui(){
JFrame=新JFrame(“BtnScrl”);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.add(createButtons());
frame.pack();
frame.setLocationByPlatform(真);
frame.setVisible(true);
}
私有JScrollPane createButtons(){
JPanel面板=新的JPanel();
面板。设置首选尺寸(新尺寸(400290));
对于(字符串标记:Arrays.asList(“一”),
“两个”,
“三”,
“四”,
“五个”,
“六”,
“七”,
“八”,
“九”,
“十”,
"012",
“qwer”,
“zNote所有Swing组件都应该在事件分派线程(EDT)上创建。因此,所有代码,而不仅仅是setVisible(…)都应该是调用器(…)
Thistest.setPreferredSize(新维度(200100))的一部分;
人为地限制测试JPanel的大小。您肯定不想这样做。如果我删除该行,按钮不会在面板的边缘缠绕注意所有Swing组件都应该在事件调度线程(EDT)上创建。因此,所有代码,而不仅仅是setVisible(…)都应该是调用器(…)的一部分
此测试。设置PreferredSize(新维度(200100));
人为约束