Java实现窗体分区,一个JPanel面板,一个JScrollPane面板

最近由于使用需要,要将一个窗体分为两部分,两个部分相互独立,一部分是普通面板(JPanel),另外一部分是滚动面板(JScrollPane)。效果类似于eclipse的代码区和结果区。

查了资料后知道可以使用JSplitPane进行窗格拆分。

因为当时看到的例子是将两个普通面板拆分,然后我的第一想法是将滚动面板加到普通面板中,想到了就做,我试了好多次,发现一只没有滚动条。然后又查了相关原因:

在滚动面板中加入的JPanel或者JTextArea等组件,在预设置(setPreferredSize(new Dimension())其大小的时候要大于滚动面板组件的大小,在效果刚出来的时候才会显示滚动条。 如果开始组件的大小没有滚动面板的大,到了后续使用过程中内容超出范围的时候应该会出现滚动条。  所以滚动条出现的条件是滚动面板中的内容大小超出了滚动面板的大小。

我按照这种预设置方式进行了尝试,发现还是没有滚动条,然后又去搜了一些,没有找到。

等我找了很久之后,突然醒悟,为什么不能直接将JScrollPane替换成两个JPanel中的一个。。。  这样试了,果然就行了。(这脑子啊,不灵活的时候很费时间的。)

下面给个例子:

import java.awt.BorderLayout;
import java.awt.Toolkit;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTextArea;

public class SplitPane1 extends JFrame{
	JPanel jp1=new JPanel();
	
	JScrollPane jscrollPane;
	JTextArea  jtf=new JTextArea();
	
	int screenWidth = Toolkit.getDefaultToolkit().getScreenSize().width;
	int screenHeight = Toolkit.getDefaultToolkit().getScreenSize().height;
	
	SplitPane1(){
		jtf.setPreferredSize(new Dimension(400,300));//预设置JTextArea的大小
		
		Container container = getContentPane();
		jscrollPane = new JScrollPane(jtf);
		jscrollPane.setSize(300,200);
		
		//将jp1和jscrollPane两个面板在窗体中分割成上下两部分
		JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, jp1, jscrollPane);
		
		container.add(splitPane,BorderLayout.CENTER);
		pack();
		this.setSize(screenWidth/2,screenHeight/2);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
		splitPane.setDividerLocation(0.7);//设置分割线位置
     
 }
	
 public static void main(String[] args) {
	 new SplitPane1();
 }
}

 

你可能感兴趣的:(Java)