如题 在一个panel中加入一些控件 如果太大就出现滚动条 我想要的效果是 出现滚动条时 就出现相对应的按钮可以控制滚动条。现在的问题是 不知道怎么判断滚动条是否出现。我的结构是 panel 布局为borderlayout 在其中放入不同的panel 有的panel里放文字 有的里面放图片 放的内容都是从数据库中取出来的,然后跟据不同的内容 得到不同的panel 放到 为borderlayout布局的panel 的center位置。主要的问题就是判断滚动条是否出现。不知道有没有大侠可以帮忙解决下。
在线等!!!!!!!!
在线等!!!!!!!!
getVerticalScrollBar() /getHorizontalScrollBar() 取得JScrollBar
然后addAdjustmentListener
或者需要的判断时候判断一下JScrollBar的isVisible
JScrollBar已经取到 但不知怎么加
不说其他,直接先贴上代码:import javax.swing.*;
import java.awt.*;
import java.awt.event.*; public class tt extends JFrame
implements ActionListener
{ private static final long serialVersionUID = 2656136464519181862L;
public JTextArea display;
public JTextArea chat;
private JButton pass;
public JScrollPane displayArea;
public JScrollPane chatArea;JPanel pane; public tt(){
this.setTitle("服务器");
int screenWidth = (int)java.awt.Toolkit.getDefaultToolkit().getScreenSize().width;
int screenHeight = (int)java.awt.Toolkit.getDefaultToolkit().getScreenSize().height;
display=new JTextArea();
chat=new JTextArea();
displayArea=new JScrollPane(display);
chatArea=new JScrollPane(chat);
pass=new JButton("发送");
pane=new JPanel();
pane.setLayout(null);
pane.add(displayArea);
pane.add(chatArea);
pane.add(pass);
displayArea.setBounds(0,5,240,100);
chatArea.setBounds(5,125,140,50);
pass.setBounds(160,125,70,50);
this.getContentPane().add(pane).setBackground(Color.white);
this.getContentPane().add(pane);
pass.addActionListener(this);
this.setResizable(false);
this.setSize(240,240);
this.setLocation((screenWidth-300), (screenHeight-280));
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
this.setVisible(true);
} public void actionPerformed(ActionEvent e){
System.out.println(displayArea.getSize());
System.out.println(display.getSize());
}public static void main(String args[]){
new tt();
}
} 好了,我承认我是改写了一下以前的程序。
下面来说明下判定方式:
首先,在代码中有
public JScrollPane displayArea和public JTextArea display;对象,我们就用它们来测试。
先看滚动条实现的原理:
display=new JTextArea();
displayArea=new JScrollPane(display);
将JTextArea类生成的对象以参数形式传入JScrollPane,JScrollPane对象根据JTextArea大小在内部判定是否生成滚动条已实现JTextArea区域的缩放显示,这点具体看API。
那么,JScrollPane和JTextArea应该是具有不同的Size?
为了验证这一点,我们加入了一个按钮监听,每次按下的时候打印出JScrollPane和JTextArea的Size,好了,聪明的你应该明白接下来该如何处理了。
-------------神奇分割线----------------
测试分三步进行:
1.正常的文本输入,不生成任何滚动条点击按钮
我们发现,出现如此结果
java.awt.Dimension[width=240,height=100]
java.awt.Dimension[width=237,height=97]
JTextArea的X和Y值是小于JScrollPane的X和Y值的2.使得JTextArea行超出长度,获得横向滚动条
java.awt.Dimension[width=240,height=100]
java.awt.Dimension[width=253,height=82]
JTextArea的X值是大于JScrollPane的X值的3.使得JTextArea列超出长度,获得纵向滚动条
java.awt.Dimension[width=240,height=100]
java.awt.Dimension[width=222,height=126]
JTextArea的Y值是大于JScrollPane的Y值的好啦,就说到这,后续的处理聪明的你一定会做啦!
先谢了 我仔细看看 你说那个方法我也正在试 就是没成功
我是在一个内部类里,new出来panel里面有JScrollPane,从中能得到垂直水平两个JScrollBar,同时还new出了4个button,用来控制滚动条上下左右动的。 然后把panel放在外部的那个类的一个panel里,层次好像就是这样的
我想的是 出现水平的JScrollBar 就显示控制水平JScrollBar的两个按钮 另两个button隐藏
同理 出现竖直的JScrollBar 就显示控制竖直JScrollBar的两个按钮 另两个button隐藏
不知道为什么 这么写得到的都是true
不知道为什么 这么写 得到的都是trueif(scrollBar_V.isVisible()){
upButton.setVisible(true);
downButton.setVisible(true);
}else{
upButton.setVisible(false);
downButton.setVisible(false);
}
...
JScrollPane center=new JScrollPane();
center.getViewport().add(new JTextArea);
c.add(center)
...
简单来说就是在Container 中加入JScrollPane ,在JScrollPane 中加入显示资料的component
没关系 其实现在的问题 也不是原来的那样了 方法 前几楼已经给出了 答案 用isVisible
但是我不知道我的代码那里有错 JScrollBar.isVisible()的值总为true
楼主可以这样Container c = this.getContentPane();
JScrollPane center=new JScrollPane();
center.getViewport().add(new JTextArea);
center.setCorner("LOWER_RIGHT_CORNER",up);
c.add(center);其实就是使用setCorner方法,该方法很方便的就可以设置4个角落上的component,甚至可以直接控制其出现
这样设置一个button up = new button()就会在出现滚动条的时候出现上下按钮,哎,仔细看api还是很重要的
如果一定要判断是否出现了滚动条,我觉得只能变相达到这个效果
jScrollPane中有个方法控制滚动条出现的,有3个值
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS
只有通过中间属性去判断和改变了,具体怎么弄,下班了,在想想
按钮 是 button 是 不在这个滚动条内部的 是在旁边放着的。
大概样子就是 左边 是一个带滚动条的panel 右边是带button的panel 出现滚动条 则右边出现相应的button 所以要判断滚动条是否出现。
当前问题 有变 不是判断是否显示 了 是在哪里判断它是否显示
在一个cardlayout布局中,jscrollpane是加在panel中的 有N个panel 每个panel都有加
然后把这些panel都放入到cardlayout中 问题现在时怎么能在跳转到某个panel时得到 他有没有显示滚动条代码500多行 加上那些工具类 我都不知道有多少了!
还贴!!!~~~~—_—!
CardLayout panelLayout = new CardLayout();
rightPanel.setLayout(panelLayout);
2.加入 Panel 到 rightPanel
rightPanel.add(one, "1");
rightPanel.add(two, "2");
rightPanel.add(three, "3");
3.要显示相应 Panel ,你得有监听吧?假设有三个按钮名为b1,b2,b3,按钮的Text分别为1,2,3
public void actionPerformed(ActionEvent e){
String str = ((JButton)e.getSource()).getText();
centerRightPanelLayout.show(centerRightPanel, str); //rightPanel转到相应Panel
int order = Integer.parseInt(str);
centerRightPanel.getComponent(order-1); //取到对应的Panel
}
4.取到对应Panel了,再对其中的JScrollpane判断就行了。
我这个card.show(panel,id) 是用数据库里的id命名的 所以没啥规律吧(系统自动生成的id)