求助,如何刷新JScrollPane的滚动条? 继承JComponent写了一个类canvas,放在JScrollPane里面,但是用setPreferredSize调整canvas的大小之后,JScrollPane的大小没有变化,调用canvas.getParent().repaint()也没有用,只有当整个窗口的大小变化时滚动条的大小才会刷新,请问应该如何刷新JScrollPane的滚动条? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 谢谢楼上诸位,大概就是这个意思:import java.awt.Dimension;import java.awt.Graphics;import java.awt.Rectangle;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import javax.swing.*;public class JMyWidget extends JComponent { Rectangle rect; public JMyWidget(){ rect = new Rectangle(0, 0, 100, 100); this.addMouseListener(new MouseAdapter(){ public void mouseClicked(MouseEvent e){ rect.width += 10; rect.height += 10; JMyWidget.this.setPreferredSize(new Dimension(rect.width, rect.height)); JMyWidget.this.getParent().repaint();//JMyWidget自己重绘了,但是滚动条拽一下窗口才出现…… //如何让JScrollPane知道滚动条需要重画? } }); } public void paintComponent(Graphics g){ g.fillRect(rect.x, rect.y, rect.width, rect.height); } public static void main(String[] args){ JFrame frame = new JFrame(); JScrollPane pane = new JScrollPane(); JMyWidget myw = new JMyWidget(); pane.setViewportView(myw); frame.add(pane); frame.setSize(200, 150); frame.setVisible(true); }} import java.awt.Dimension;import java.awt.Graphics;import java.awt.Rectangle;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import javax.swing.*;public class JMyWidget extends JComponent { Rectangle rect; static JScrollPane pane = new JScrollPane(); public JMyWidget(){ rect = new Rectangle(0, 0, 100, 100); this.addMouseListener(new MouseAdapter(){ public void mouseClicked(MouseEvent e){ rect.width += 10; rect.height += 10; JMyWidget.this.setPreferredSize(new Dimension(rect.width, rect.height)); pane.setViewportView(JMyWidget.this); JMyWidget.this.getParent().repaint();//JMyWidget自己重绘了,但是滚动条拽一下窗口才出现…… //如何让JScrollPane知道滚动条需要重画? } }); } public void paintComponent(Graphics g){ g.fillRect(rect.x, rect.y, rect.width, rect.height); } public static void main(String[] args){ JFrame frame = new JFrame(); JMyWidget myw = new JMyWidget(); pane.setViewportView(myw); frame.add(pane); frame.setSize(200, 150); frame.setVisible(true); }} 在事件中用pane添加组件。搞定。 设置过perferredSize之后,调用一下validate或者revalidate方法。不然不会立即更新。 关于聊天程序的服务器端 两个问题 请教一个JAVA 解析XML的问题 非常感谢 “+”的使用规则? 代码转换到流 正则表达式怎么表达“或”啊? 关于多线程 关于session 菜鸟问题:企业级是什么?什么样的项目才叫企业级?Java是如何实现企业级的项目的? 请问网友,现在有人经常提的“事务处理”有能详细讲讲的吗。谢谢了 征集过滤器代码 下面这段代码是怎么实现对鼠标的点击的
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;import javax.swing.*;public class JMyWidget extends JComponent {
Rectangle rect;
public JMyWidget(){
rect = new Rectangle(0, 0, 100, 100);
this.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e){
rect.width += 10;
rect.height += 10;
JMyWidget.this.setPreferredSize(new Dimension(rect.width, rect.height));
JMyWidget.this.getParent().repaint();//JMyWidget自己重绘了,但是滚动条拽一下窗口才出现……
//如何让JScrollPane知道滚动条需要重画?
}
});
}
public void paintComponent(Graphics g){
g.fillRect(rect.x, rect.y, rect.width, rect.height);
}
public static void main(String[] args){
JFrame frame = new JFrame();
JScrollPane pane = new JScrollPane();
JMyWidget myw = new JMyWidget();
pane.setViewportView(myw);
frame.add(pane);
frame.setSize(200, 150);
frame.setVisible(true);
}
}
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;import javax.swing.*;public class JMyWidget extends JComponent {
Rectangle rect;
static JScrollPane pane = new JScrollPane();
public JMyWidget(){
rect = new Rectangle(0, 0, 100, 100);
this.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e){
rect.width += 10;
rect.height += 10;
JMyWidget.this.setPreferredSize(new Dimension(rect.width, rect.height));
pane.setViewportView(JMyWidget.this);
JMyWidget.this.getParent().repaint();//JMyWidget自己重绘了,但是滚动条拽一下窗口才出现……
//如何让JScrollPane知道滚动条需要重画?
}
});
}
public void paintComponent(Graphics g){
g.fillRect(rect.x, rect.y, rect.width, rect.height);
}
public static void main(String[] args){
JFrame frame = new JFrame();
JMyWidget myw = new JMyWidget();
pane.setViewportView(myw);
frame.add(pane);
frame.setSize(200, 150);
frame.setVisible(true);
}
}