展开全部
一共有三个方法实现你e69da5e887aa62616964757a686964616f31333262366435要的效果,分别用三种布局管理器
下面的代码可以直接复制粘贴,类的名字是TestJScrollPane
测试的方法在init()中
图片可以放在JLabel上作为它的背景图片,就可以实现两张图片平行
其中我重写了GBC类,是为了方便使用GridBagLayout的布局管理器
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Insets;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
/**
* 测试三个布局方法,实现你所要的效果
* @author resong27lhk
*
*/
public class TestJScrollPane extends JFrame {
/**
* 构造器
*/
public TestJScrollPane(){
super("测试滚动区域");
init();
}
/**
* 初始化
*/
private void init(){
this.setSize(800, 600);
//页面居中
this.setLocationRelativeTo(null);
//点击关闭,有效关闭整个程序
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//测试FlowLayout布局管理器
// this.add(panelF());
//测试GridLayout布局管理器
// this.add(panelGL());
//测试GridBagLayout布局管理器
this.add(panelGBL());
this.setVisible(true);
}
/**
* 第一个方法:用flowlayout布局管理器
* @return
*/
private JPanel panelF(){
JPanel panel = new JPanel();
FlowLayout fl = new FlowLayout();
panel.setLayout(fl);
//居中显示
fl.setAlignment(FlowLayout.CENTER);
//设置一个固定的大小
Dimension size = new Dimension(300,400);
JLabel labLeft = new JLabel();
JLabel labRight = new JLabel();
//使两个标签的大小都是一个相同的固定大小
labLeft.setPreferredSize(size);
labRight.setPreferredSize(size);
//左右两个JScrollPane
JScrollPane jsLeft = new JScrollPane(labLeft,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
JScrollPane jsRight = new JScrollPane(labRight,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
panel.add(jsLeft);
panel.add(jsRight);
return panel;
}
/**
* 第二个方法:用GridLayout布局管理器
* @return
*/
private JPanel panelGL(){
JPanel panel = new JPanel();
GridLayout gl = new GridLayout(1,2);
panel.setLayout(gl);
//由于格子的大小是根据设置的行和列的数字
//将这个界面平均分(完全平均分)
JLabel labLeft = new JLabel();
JLabel labRight = new JLabel();
//左右两个JScrollPane
JScrollPane jsLeft = new JScrollPane(labLeft,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
JScrollPane jsRight = new JScrollPane(labRight,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
panel.add(jsLeft);
panel.add(jsRight);
return panel;
}
/**
* 第三个方法:用GridBagLayout布局管理器
* @return
*/
private JPanel panelGBL(){
JPanel panel = new JPanel();
GridBagLayout gbl = new GridBagLayout();
panel.setLayout(gbl);
//设置一个固定的大小
Dimension size = new Dimension(300,400);
JLabel labLeft = new JLabel();
JLabel labRight = new JLabel();
//设置标签大小
labLeft.setPreferredSize(size);
labRight.setPreferredSize(size);
//左右两个JScrollPane
JScrollPane jsLeft = new JScrollPane(labLeft,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
JScrollPane jsRight = new JScrollPane(labRight,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
panel.add(jsLeft,new GBC(0,0));
panel.add(jsRight,new GBC(1,0));
return panel;
}
/**
* 测试
* @param args
*/
public static void main(String[] args) {
new TestJScrollPane();
}
}
/**
* 重写了GridBagConstraints,方便操作,是一个工具类
* @author resong27lhk
*
*/
class GBC extends GridBagConstraints{
public GBC(){}
public GBC(int gridx,int gridy){
this.gridx = gridx;
this.gridy = gridy;
}
public GBC(int gridx,int gridy,int gridheight,int gridwidth){
this.gridx = gridx;
this.gridy = gridy;
this.gridheight = gridheight;
this.gridwidth = gridwidth;
}
public GBC setFill(int fill){
this.fill = fill;
return this;
}
public GBC setInsets(Insets insets){
this.insets = insets;
return this;
}
}
本回答由提问者推荐
已赞过
已踩过<
你对这个回答的评价是?
评论
收起