JPanel的JScrollPane下拉后也不能完全显示新增的控件

fightspirite 2006-10-20 12:35:20
我的一个JPanel(布局是BoxLayout, Y_AXIS)添加进JScrollPane。在JPanel中有一个按钮JButton1,点击会在该panel上添加一个新的按钮,当添加的按钮已经超出panel的显示范围时,JScrollPane没有显示出竖直方向的滚动条。为什么呢?原代码如下:
import java.awt.Dimension;
import javax.swing.*;
import java.awt.event.*;
import java.awt.Graphics;
import javax.swing.WindowConstants;


public class NewJPanel extends javax.swing.JPanel {
private JButton jButton1;
private JPanel thisPanel=this;
int i=0;
public static void main(String[] args) {
JFrame frame = new JFrame();
NewJPanel p=new NewJPanel();
JScrollPane js=new JScrollPane(p,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
frame.getContentPane().add(js);
frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}

public NewJPanel() {
super();
initGUI();
jButton1.addActionListener(new listener());
}

private void initGUI() {
try {
BoxLayout thisLayout = new BoxLayout(
this,
javax.swing.BoxLayout.Y_AXIS);
this.setLayout(thisLayout);
this.setPreferredSize(new java.awt.Dimension(193, 300));
{
jButton1 = new JButton();
this.add(jButton1);
jButton1.setText("jButton1");
}
} catch (Exception e) {
e.printStackTrace();
}
}

class listener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==jButton1)
{
JButton jb=new JButton(""+i);
jb.addActionListener(new relistener());
thisPanel.add(jb);
thisPanel.updateUI();
i++;
}
}
}

class relistener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
thisPanel.remove((JButton)e.getSource());
thisPanel.updateUI();
}
}

}
...全文
337 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Santos 2007-01-04
  • 打赏
  • 举报
回复
遇到同样问题,关注
dracularking 2007-01-04
  • 打赏
  • 举报
回复
//this.setPreferredSize(new java.awt.Dimension(193, 300));
{
jButton1 = new JButton();
this.add(jButton1);
jButton1.setText("jButton1");
}

JPanel被定型啦
hoverlees 2007-01-04
  • 打赏
  • 举报
回复
呵呵,你这样加入JPanel试试:
JScrollPane js=new JScrollPane();
js.getViewPort.add(p);

wuv1982 2007-01-04
  • 打赏
  • 举报
回复
修正下,应该是以JScrollPane的父容器的大小为基准,不一定是JFrame,也可以是JPanel
wuv1982 2007-01-04
  • 打赏
  • 举报
回复
JScrollPane以JFrame的大小为基准,当超过JFrame的大小后才会显示滚动条
去掉this.setPreferredSize(new java.awt.Dimension(193, 300));这句

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧