Java JScrollPane滚动条不会显示?
我不知道为什么滚动条不会出现。JPanel比JScrollPane大,所以我认为它应该出现。另外,当我尝试在滚动窗格中使用setPreferredSize而不是setBounds或setSize时,根本没有显示任何内容。我的最终目标是在程序右侧关闭一个按钮,以添加另一组按钮(循环中的按钮),用于选择另一项。我希望程序以10行按钮开始,但我将其设置为20以测试滚动条。是因为没有布局还是我弄乱了滚动窗格?问题在于没有使用正确的Swing布局 这是我创建的GUI 我在按钮和组合框中添加了文本,因此GUI看起来更真实。我注释掉了关注GUI的外观和感觉。我更改了类的名称,因为我为堆栈溢出编写的所有代码都有一个测试包 我用一个单独的方法创建了按钮JPanel。我使用了网格布局。这允许我创建20行3个Swing组件。这也让我能够将组件隔开一点 我用另一种方法创建了scroll JPanel。关键是使用滚动JPanel的边框布局。我使滚动按钮JPanel的大小为按钮JPanel的一半,这样它就可以滚动了。您可以根据需要调整此计算 下面是完整的可运行代码Java JScrollPane滚动条不会显示?,java,swing,jscrollpane,null-layout-manager,Java,Swing,Jscrollpane,Null Layout Manager,我不知道为什么滚动条不会出现。JPanel比JScrollPane大,所以我认为它应该出现。另外,当我尝试在滚动窗格中使用setPreferredSize而不是setBounds或setSize时,根本没有显示任何内容。我的最终目标是在程序右侧关闭一个按钮,以添加另一组按钮(循环中的按钮),用于选择另一项。我希望程序以10行按钮开始,但我将其设置为20以测试滚动条。是因为没有布局还是我弄乱了滚动窗格?问题在于没有使用正确的Swing布局 这是我创建的GUI 我在按钮和组合框中添加了文本,因此GU
package me.an.ugm;
import java.awt.EventQueue;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;
import javax.swing.UIManager;
public class Application
{
private JFrame frame;
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
try
{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
Application window = new Application();
window.frame.setVisible(true);
} catch (Exception e)
{
e.printStackTrace();
}
}
});
}
public Application()
{
initialize();
}
private void initialize()
{
frame = new JFrame();
frame.setTitle("Application");
frame.setBounds(100, 100, 401, 450);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
//frame.setResizable(false);
frame.setLocationRelativeTo(null);
JPanel panel = new JPanel();
panel.setBounds(0, 0, 296, 710);
panel.setLayout(null);
JScrollPane scrollPane = new JScrollPane(panel, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
scrollPane.setBounds(0, 0, 296, 399);
frame.getContentPane().add(scrollPane);
for (int i = 0, j = 10; i < 20; i++, j += 35)
{
JButton button1 = new JButton();
button1.setBounds(10, j, 25, 25);
panel.add(button1);
JComboBox<String> selectorBox = new JComboBox<>();
selectorBox.setBounds(40, j, 200, 25);
panel.add(selectorBox);
JButton button2 = new JButton();
button2.setBounds(245, j, 25, 25);
panel.add(button2);
}
}
}
问题在于没有使用正确的Swing布局 这是我创建的GUI 我在按钮和组合框中添加了文本,因此GUI看起来更真实。我注释掉了关注GUI的外观和感觉。我更改了类的名称,因为我为堆栈溢出编写的所有代码都有一个测试包 我用一个单独的方法创建了按钮JPanel。我使用了网格布局。这允许我创建20行3个Swing组件。这也让我能够将组件隔开一点 我用另一种方法创建了scroll JPanel。关键是使用滚动JPanel的边框布局。我使滚动按钮JPanel的大小为按钮JPanel的一半,这样它就可以滚动了。您可以根据需要调整此计算 下面是完整的可运行代码
package me.an.ugm;
import java.awt.EventQueue;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;
import javax.swing.UIManager;
public class Application
{
private JFrame frame;
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
try
{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
Application window = new Application();
window.frame.setVisible(true);
} catch (Exception e)
{
e.printStackTrace();
}
}
});
}
public Application()
{
initialize();
}
private void initialize()
{
frame = new JFrame();
frame.setTitle("Application");
frame.setBounds(100, 100, 401, 450);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
//frame.setResizable(false);
frame.setLocationRelativeTo(null);
JPanel panel = new JPanel();
panel.setBounds(0, 0, 296, 710);
panel.setLayout(null);
JScrollPane scrollPane = new JScrollPane(panel, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
scrollPane.setBounds(0, 0, 296, 399);
frame.getContentPane().add(scrollPane);
for (int i = 0, j = 10; i < 20; i++, j += 35)
{
JButton button1 = new JButton();
button1.setBounds(10, j, 25, 25);
panel.add(button1);
JComboBox<String> selectorBox = new JComboBox<>();
selectorBox.setBounds(40, j, 200, 25);
panel.add(selectorBox);
JButton button2 = new JButton();
button2.setBounds(245, j, 25, 25);
panel.add(button2);
}
}
}
不要使用空布局!!!Swing设计用于布局管理器。使用空布局时,滚动窗格将不起作用。请记住,LayoutManager旨在帮助开发人员。他们在幕后做了很多事情,以使需要花费大量精力才能完成的工作得以顺利进行。为什么不想使用它们?不要使用空布局!!!Swing设计用于布局管理器。使用空布局时,滚动窗格将不起作用。请记住,LayoutManager旨在帮助开发人员。他们在幕后做了很多事情,以使需要花费大量精力才能完成的工作得以顺利进行。你为什么不想用它们呢?