gpt4 book ai didi

java - java Swing 中没有出现滚动条

转载 作者:行者123 更新时间:2023-12-02 11:21:11 31 4
gpt4 key购买 nike

在我的程序中,我向面板添加了一个标签、两个单选按钮、一个文本字段和提交按钮。我的单选按钮和提交按钮未以当前窗口大小显示,因为我已在 JFrame 窗口下方设置了它们的位置。但滚动条没有出现在窗口中。告诉我哪里错了。

这是我的代码

import java.awt.BorderLayout;
import java.awt.Container;
import javax.swing.*;
class SwingForm extends JFrame
{
SwingForm()
{
super();
Container c=getContentPane();
c.setLayout(new BorderLayout());
JPanel p=new JPanel();
p.setLayout(null);
JLabel l=new JLabel("First Name");
l.setBounds(50, 50, 70, 20);
JTextField j=new JTextField();
j.setBounds(150, 50, 70, 20);
JRadioButton j1=new JRadioButton("Male");
j1.setBounds(50, 300, 70, 50);
JRadioButton j2=new JRadioButton("Female");
j2.setBounds(170, 300, 70, 50);
JButton b=new JButton("Submit");
b.setBounds(100, 600, 100, 100);
ButtonGroup bg=new ButtonGroup();
bg.add(j1);
bg.add(j2);
p.add(l);
p.add(j);
p.add(j1);
p.add(j2);
p.add(b);
int v=ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED;
int h=ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED;
JScrollPane jp=new JScrollPane(p,v,h);
c.add(jp,BorderLayout.CENTER);
setVisible(true);
setSize(300,300);
}
public static void main(String args[])
{
new SwingForm();
}
}

这是输出 Scrollbars not appering even i have radiobutton and submit button below the window

enter image description here

最佳答案

p.setLayout(null); 是您的(最重要的问题)。 JScrollPane 将依赖其 View 的 preferredSize 来确定何时显示滚动条。

实现此功能的最佳方法是使用一个或多个合适的布局管理器并让 API 完成其工作

下面的示例实际上使用了 3 个布局管理器:BorderLayout(JFrame 的默认设置)、FlowLayout(JFrame 的默认设置) JPanel) 和 GridBagLayout

参见Layout out components in a container了解更多详情

Hello scrollbars

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTextField;

public class Test {

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

public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame();
JPanel p = new JPanel();
p.setLayout(new GridBagLayout());

GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
JLabel l = new JLabel("First Name");
p.add(l, gbc);

JTextField j = new JTextField(12);
gbc.gridx++;
p.add(j, gbc);

gbc.gridx = 0;
gbc.gridy++;
gbc.gridwidth = GridBagConstraints.REMAINDER;

JRadioButton j1 = new JRadioButton("Male");
JRadioButton j2 = new JRadioButton("Female");
ButtonGroup bg = new ButtonGroup();
bg.add(j1);
bg.add(j2);
JPanel buttons = new JPanel();
buttons.add(j1);
buttons.add(j2);
p.add(buttons, gbc);

gbc.gridy++;
gbc.insets = new Insets(100, 0, 0, 0);

JButton b = new JButton("Submit");
p.add(b, gbc);

JScrollPane jp = new JScrollPane(p);
frame.add(jp, BorderLayout.CENTER);
//frame.pack();
// This is just to force the point
frame.setSize(250, 100);
frame.setVisible(true);
}
});
}

}

关于java - java Swing 中没有出现滚动条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49912642/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com