gpt4 book ai didi

java - JScrollPane 不起作用

转载 作者:行者123 更新时间:2023-12-02 00:20:51 28 4
gpt4 key购买 nike

嘿伙计们,我想创建一个 JScrollPane 但它不起作用...我不知道为什么...这是我的代码...

public class test extends JFrame{
public test(){
setSize(1000,600);

}

private static JButton[] remove;
private static JPanel p = new JPanel();

public static void main(String[]args){
p.setLayout(null);
JFrame t=new test();
remove = new JButton[25];
for(int i=0;i<25;i++){
remove[i]=new JButton("Remove");
remove[i].setBounds(243,92+35*i,85,25);
p.add(remove[i]);
}
JScrollPane scrollPane = new JScrollPane(p);
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
t.add(scrollPane);
t.setVisible(true);
}

嗯,我很确定框架对于这 25 个按钮来说不够大...但是如果我删除该 p.setLayout(null); 将自动创建水平滚动条。 ..我真的不知道我的代码出了什么问题...请帮助,非常感谢!

最佳答案

您需要设置p的preferredSize才能使其工作。

  p.setPreferredSize(new Dimension(800, 2000));

或者您可以让 p 扩展 JPanel,然后重写 getPreferredSize() 方法以返回正确的尺寸。

我同意——摆脱你的空布局。如果您想正确使用 Swing 并拥有强大的 Swing GUI,请了解并使用布局管理器。

例如,

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Foo extends JFrame {

private static final int BUTTON_COUNT = 25;

public static void main(String[] args) {
JPanel btnPanel = new JPanel(new GridLayout(0, 1, 0, 20));
btnPanel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
AbstractAction removeAction = new AbstractAction("Remove") {

@Override
public void actionPerformed(ActionEvent evt) {
JButton src = (JButton) evt.getSource();
JPanel container = (JPanel) src.getParent();
container.remove(src);
container.revalidate();
container.repaint();
}
};
for (int i = 0; i < BUTTON_COUNT; i++) {
JButton removeBtn = new JButton(removeAction);
btnPanel.add(removeBtn);
}
JPanel borderPanel = new JPanel(new BorderLayout());
borderPanel.add(btnPanel, BorderLayout.NORTH);
JScrollPane scrollpane = new JScrollPane(borderPanel,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
scrollpane.setPreferredSize(new Dimension(400, 800));

JFrame frame = new JFrame("Foo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(scrollpane);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}

}

关于java - JScrollPane 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10989221/

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