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();
 }
}

 

可以使用CardLayout类来实现一个窗体中添加多个面板进行切换。 首先需要创建一个JFrame窗体对象和多个JPanel面板对象,然后将这些面板添加到JFrame窗体中。接着使用CardLayout类来管理这些面板的切换。 示例代码如下: ```java import java.awt.CardLayout; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JButton; public class SwitchPanels { private static JPanel mainPanel; private static CardLayout cardLayout; public static void main(String[] args) { // 创建JFrame窗体对象和多个JPanel面板对象 JFrame frame = new JFrame("Switch Panels"); JPanel panel1 = new JPanel(); JPanel panel2 = new JPanel(); JPanel panel3 = new JPanel(); // 添加按钮到面板 panel1.add(new JButton("Panel 1")); panel2.add(new JButton("Panel 2")); panel3.add(new JButton("Panel 3")); // 创建主面板并设置CardLayout布局 mainPanel = new JPanel(); cardLayout = new CardLayout(); mainPanel.setLayout(cardLayout); // 将面板添加到主面板中 mainPanel.add(panel1, "panel1"); mainPanel.add(panel2, "panel2"); mainPanel.add(panel3, "panel3"); // 将主面板添加到窗体中 frame.add(mainPanel); // 设置窗体属性并显示 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(400, 300); frame.setVisible(true); } } ``` 在上面的代码中,我们创建了三个面板,分别添加了一个按钮。然后创建了一个面板,并将这三个面板添加到主面板中,使用CardLayout来管理这些面板的切换。最后将主面板添加到窗体中,并设置窗体的属性并显示。 在实际使用中,可以通过按钮的事件来控制面板的切换。例如,可以为每个按钮添加ActionListener监听器,在监听器中使用cardLayout.show()方法来切换面板
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值