【发布时间】:2011-11-05 20:19:17
【问题描述】:
我有以下代码。执行以下代码后,它显示了一个包含一个 JInternalFrame 的 JFrame,它有一个 JScrollPane 这个 JScrollPane 有一个 JPanel 有很多输入控件。由于 JPanel 的大小由于许多输入控件而比 JInternalFrame 的大小要大,所以我它是可滚动的。
import java.awt.Dimension;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
public class InterfaceDesign {
public static void main(String args[]) {
InterfaceDesign id = new InterfaceDesign();
id.getPnlProjectDetail("My Project");
}
public void getPnlProjectDetail(String strProjectName) {
JPanel pnlPjDetail = new JPanel();
JScrollPane scrPjDetail;
pnlPjDetail.setLayout(null);
pnlPjDetail.setBounds(0, 0, 400, 400);
JFrame frmtest = new JFrame();
JInternalFrame interFrame = new JInternalFrame();
interFrame.setBounds(0, 0, 280, 180);
frmtest.setBounds(1, 1, 300, 200);
pnlPjDetail.setPreferredSize(new Dimension(400, 400));
JLabel lblFirstName = new JLabel("First Name");
JLabel lblLastName = new JLabel("Last Name");
JLabel lblAddress = new JLabel("Address");
JLabel lblCity = new JLabel("City");
JLabel lblZipCode = new JLabel("Zip Code");
JLabel lblPhone = new JLabel("Phone");
JLabel lblEmailID = new JLabel("Emain Id");
JTextField tfFirstName = new JTextField();
JTextField tfLastName = new JTextField();
JTextField tfAddress = new JTextField();
JTextField tfCity = new JTextField();
JTextField tfZipCode = new JTextField();
JTextField tfPhone = new JTextField();
JTextField tfEmailID = new JTextField();
lblFirstName.setBounds(25, 55, 85, 20);
tfFirstName.setBounds(25, 85, 85, 20);
pnlPjDetail.add(lblFirstName);
pnlPjDetail.add(tfFirstName);
lblLastName.setBounds(25, 115, 85, 20);
tfLastName.setBounds(25, 145, 85, 20);
pnlPjDetail.add(lblLastName);
pnlPjDetail.add(tfLastName);
lblAddress.setBounds(25, 175, 85, 20);
tfAddress.setBounds(25, 205, 85, 20);
pnlPjDetail.add(lblAddress);
pnlPjDetail.add(tfAddress);
lblCity.setBounds(25, 235, 85, 20);
tfCity.setBounds(25, 265, 85, 20);
pnlPjDetail.add(lblCity);
pnlPjDetail.add(tfCity);
lblZipCode.setBounds(25, 295, 85, 20);
tfZipCode.setBounds(25, 325, 85, 20);
pnlPjDetail.add(lblZipCode);
pnlPjDetail.add(tfZipCode);
lblPhone.setBounds(25, 355, 85, 20);
tfPhone.setBounds(25, 385, 85, 20);
pnlPjDetail.add(lblPhone);
pnlPjDetail.add(tfPhone);
lblEmailID.setBounds(25, 415, 85, 20);
tfEmailID.setBounds(25, 445, 85, 20);
pnlPjDetail.add(lblEmailID);
pnlPjDetail.add(tfEmailID);
scrPjDetail = new JScrollPane(pnlPjDetail);
scrPjDetail.setAutoscrolls(true);
//frmtest.setContentPane(scrProjectDetail);
interFrame.setContentPane(scrPjDetail);
JDesktopPane dpane = new JDesktopPane();
interFrame.setVisible(true);
dpane.add(interFrame);
//frmtest.getLayeredPane().add(interFrame);
frmtest.setContentPane(dpane);
//frmtest.add(scrProjectDetail);
frmtest.setVisible(true);
frmtest.setResizable(false);
frmtest.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//return pnlPjDetail;
}
}
我需要您的指导来解决以下问题/疑问
- 当我们按下键盘上的 TAB 按钮时,光标会从一个文本框移动到另一个文本框,但 ScrollBar(此处为垂直滚动条)不会随着光标移动到下方输入字段而自动移动 那么如何使滚动条移动当它向下或向上移动时,它本身是否与光标一起移动?
- 由于这是一个演示代码,是否可以将两个 JscrollPane 并排添加到 JInterNalFrame 中?
- 是否需要用户 JDesktopPane 将 JInternalFrame 添加到 JFrame 中?即我们不能按如下方式添加 JInternalFrame 是真的吗
<JFrame>.getContentPane.add(<JInternalFrame>);
【问题讨论】:
-
与您的问题无关,有几个 cmets:a)不要使用 null 布局 b)不要在应用程序代码中使用 setXXSize c)使用可读的字段/方法名称(没有类似匈牙利语的前缀)
标签: java swing jpanel scrollbar jscrollpane