Java 卡片布局中的可滚动JPanel?
我一直在寻找一种方法,将垂直滚动条添加到Java 卡片布局中的可滚动JPanel?,java,swing,user-interface,layout,cardlayout,Java,Swing,User Interface,Layout,Cardlayout,我一直在寻找一种方法,将垂直滚动条添加到JPanel,然后将其添加到CardLayout面板。我在这里查阅了所有关于实现可滚动的JPanel的帖子,但我不知道如何用这个特定的CardLayout实现它。Oracle也没有给出我可以使用的示例 也许我没有为JWindow或我使用的任何其他组件使用正确的配置 我在下面放了一个精简版的程序,我想为它实现一个垂直滚动条 我的问题是如何在代码底部实现JPanelScrollable类,以便它可以滚动 import javax.swing.*; impor
JPanel
,然后将其添加到CardLayout
面板。我在这里查阅了所有关于实现可滚动的JPanel
的帖子,但我不知道如何用这个特定的CardLayout
实现它。Oracle也没有给出我可以使用的示例
也许我没有为JWindow
或我使用的任何其他组件使用正确的配置
我在下面放了一个精简版的程序,我想为它实现一个垂直滚动条
我的问题是如何在代码底部实现JPanelScrollable
类,以便它可以滚动
import javax.swing.*;
import java.awt.*;
import java.net.URL ;
public class Program2 extends JFrame
{
public Program2()
{
super("Flash CC");
Container2 container = new Container2();
setSize(700, 800);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setFocusable( true ) ;
add(container);
setVisible(true) ;
}
public static void main(String[] args)
{
Program2 prog = new Program2();
}
}
class Container2 extends JPanel
{
private CardLayout cardLayout = new CardLayout() ;
private JPanel1 jPanelFirst = new JPanel1() ;
private JPanel2 jPanelSecond = new JPanel2() ;
private JPanelScrollable jPanelThird = new JPanelScrollable() ;
//Constructor
Container2()
{
this.setLayout( cardLayout ) ;
this.setFocusable( true ) ;
JScrollPane scrollFrame = new JScrollPane(jPanelThird);
this.add( jPanelFirst, "first card" ) ;
this.add( jPanelSecond, "second card" ) ;
this.add( scrollFrame , "third card" ) ;
cardLayout.show( this, "third card" ) ;
}
}
class JPanel1 extends JPanel
{
}
class JPanel2 extends JPanel
{
}
class JPanelScrollable extends JPanel
{
// here many, many, many elemnts will go
// and a vertical scroll barr is needed to view'm all.
JPanelScrollable()
{
this.setOpaque( true ) ;
this.setLayout( null ) ;
for(int i=0; i<30; i++)
{
JButton b = new JButton("Button" + i) ;
b.setBounds(0, (i * 100), 100, 50) ;
this.add(b) ;
}
}
}
import javax.swing.*;
导入java.awt.*;
导入java.net.URL;
公共类程序2扩展了JFrame
{
公共计划2()
{
超级(“闪光CC”);
Container2 container=新Container2();
设置大小(700800);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(空);
设置聚焦(真);
添加(容器);
setVisible(真);
}
公共静态void main(字符串[]args)
{
Program2 prog=新程序2();
}
}
类Container2扩展了JPanel
{
private CardLayout CardLayout=新的CardLayout();
private JPanel1 jPanelFirst=new JPanel1();
private JPanel2 jPanelSecond=new JPanel2();
private JPanelScrollable jpanelhird=新的JPanelScrollable();
//建造师
容器2()
{
这个.setLayout(cardlyout);
此参数为.setFocusable(true);
JScrollPane scrollFrame=新的JScrollPane(jpanethird);
添加(jPanelFirst,“第一张卡”);
添加(jPanelSecond,“第二张卡”);
添加(滚动框,“第三张卡”);
cardLayout.show(这是“第三张卡”);
}
}
类JPanel1扩展了JPanel
{
}
类JPanel2扩展了JPanel
{
}
类JPanelScrollable扩展了JPanel
{
//这里会有很多很多很多的元素
//需要一个垂直滚动条来查看我的全部。
JPanelScrollable()
{
此.set不透明(true);
此.setLayout(null);
对于(int i=0;i,容器.add(…)
方法接受任何组件。CardLayout不限于面板
将面板添加到JScrollPane,并将滚动窗格添加到卡片布局。容器。Add(…)
方法接受任何组件。卡片布局不限于面板
将面板添加到JScrollPane,并将滚动窗格添加到卡布局。将面板添加到JScrollPane
JScrollPane scrollPane = new JScrollPane(jPanelThird);
将滚动窗格添加到CardLayout
this.add(scrollPane, "third card");
有关更多详细信息,请参阅
使用工作示例更新
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class TestCardLayout {
public static void main(String[] args) {
new TestCardLayout();
}
private int index = 0;
public TestCardLayout() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
final CardLayout cl = new CardLayout();
final JPanel cardPane = new JPanel(cl);
cardPane.add(new JLabel("Hello"), "1");
cardPane.add(new JScrollPane(createForm()), "2");
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(cardPane);
frame.setSize(200, 200);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
JButton next = new JButton("Next");
next.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
index++;
if (index > 1) {
index = 0;
}
if (index == 0) {
cl.show(cardPane, "1");
} else {
cl.show(cardPane, "2");
}
}
});
frame.add(next, BorderLayout.SOUTH);
}
});
}
public JPanel createForm() {
JPanel form = new JPanel(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridwidth = GridBagConstraints.REMAINDER;
for (int index = 0; index < 100; index++) {
form.add(new JTextField(10), gbc);
}
return form;
}
}
导入java.awt.BorderLayout;
导入java.awt.CardLayout;
导入java.awt.EventQueue;
导入java.awt.GridBagConstraints;
导入java.awt.GridBagLayout;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JPanel;
导入javax.swing.JScrollPane;
导入javax.swing.JTextField;
导入javax.swing.UIManager;
导入javax.swing.UnsupportedLookAndFeelException;
公共类TestCardLayout{
公共静态void main(字符串[]args){
新的TestCardLayout();
}
私有整数指数=0;
公共TestCardLayout(){
invokeLater(新的Runnable(){
@凌驾
公开募捐{
试一试{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}catch(ClassNotFoundException |实例化Exception | IllegalacessException |不支持ookandfeelException ex){
例如printStackTrace();
}
最终CardLayout cl=新的CardLayout();
最终JPanel cardPane=新JPanel(cl);
添加(新JLabel(“Hello”),“1”);
添加(新的JScrollPane(createForm()),“2”);
JFrame=新JFrame(“测试”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(cardPane);
框架。设置尺寸(200200);
frame.setLocationRelativeTo(空);
frame.setVisible(true);
JButton next=新JButton(“next”);
next.addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e){
索引++;
如果(索引>1){
指数=0;
}
如果(索引==0){
cl.show(卡片窗格,“1”);
}否则{
cl.show(卡片窗格,“2”);
}
}
});
frame.add(下一步,BorderLayout.SOUTH);
}
});
}
公共JPanel createForm(){
JPanel form=newJPanel(newGridBagLayout());
GridBagConstraints gbc=新的GridBagConstraints();
gbc.gridwidth=GridBagConstraints.rements;
对于(int-index=0;index<100;index++){
新增表格(新JTextField(10),gbc);
}
申报表;
}
}
将面板添加到JScrollPane
JScrollPane scrollPane = new JScrollPane(jPanelThird);
将滚动窗格添加到CardLayout
this.add(scrollPane, "third card");
有关更多详细信息,请参阅
使用工作示例更新
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class TestCardLayout {
public static void main(String[] args) {
new TestCardLayout();
}
private int index = 0;
public TestCardLayout() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
final CardLayout cl = new CardLayout();
final JPanel cardPane = new JPanel(cl);
cardPane.add(new JLabel("Hello"), "1");
cardPane.add(new JScrollPane(createForm()), "2");
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(cardPane);
frame.setSize(200, 200);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
JButton next = new JButton("Next");
next.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
index++;
if (index > 1) {
index = 0;
}
if (index == 0) {
cl.show(cardPane, "1");
} else {
cl.show(cardPane, "2");
}
}
});
frame.add(next, BorderLayout.SOUTH);
}
});
}
public JPanel createForm() {
JPanel form = new JPanel(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridwidth = GridBagConstraints.REMAINDER;
for (int index = 0; index < 100; index++) {
form.add(new JTextField(10), gbc);
}
return form;
}
}
导入java.awt.BorderLayout;
导入java.awt.CardLayout;
导入java.awt.EventQueue;
导入java.awt.GridBagConstraints;
导入java.awt.GridBagLayout;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入javax.swing.JButton;
导入javax.swing.JFrame;
进口