在JFrame中添加具有JPanel Dynamic的Scrollbar

时间:2015-01-01 11:47:41

标签: java swing jframe jpanel jscrollpane

我有两个文件,一个是Main.java,第二个是frame.java

我正在创建桌面应用程序,因此我想在scrollpane文件中根据需要垂直或水平添加Main.java

Frame.java会抛出JPanel抓取的Main.java对象并动态加载到JFrame

所以请任何人告诉我,如何添加scrollpanescrollbar。哪个最好,我不知道。谢谢..

Main.java:

package pack;

import java.awt.BorderLayout;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Main {

    public static void main(String[] args) {
        JPanel pn = null;
        JFrame mainFrame = null;

        frame login = new frame();
        mainFrame = new JFrame("Prem");
        mainFrame.setLayout(new BorderLayout());
        mainFrame.setDefaultCloseOperation(mainFrame.EXIT_ON_CLOSE);
        mainFrame.setSize(500,500);
        mainFrame.setLocationRelativeTo(null);
        pn=login.getLogin();
        mainFrame.add(pn,BorderLayout.CENTER);
        mainFrame.setVisible(true);
    }

    public Main() {
        super();
    }
}

这是从方法frame.java

抛出面板对象的第二个文件
package pack;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.AbstractAction;
import java.awt.*;
import java.awt.event.*;
public class frame {

    JPanel pane = null,pane1=null;
    JTextField userText=null,passText=null;
    JLabel userLabel =null,passLabel=null,errorLabel=null;
    JButton submitLogin = null;
    public frame()
    {
        pane = new JPanel();
        pane.setLayout(null);
    }

    public JPanel getLogin()
    {
        userLabel = new JLabel("UserName");
        pane.add(userLabel);
        userLabel.setBounds(5,10,100, 30);

        userText = new JTextField();
        pane.add(userText);
        userText.setBounds(110,10,120,30);

        passLabel = new JLabel("PassWord");
        pane.add(passLabel);
        passLabel.setBounds(5,60,100, 30);

        passText = new JTextField();
        pane.add(passText);
        passText.setBounds(110,60,120,30);

        errorLabel = new JLabel("");
        pane.add(errorLabel);
        errorLabel.setBounds(5,150,180,30);

        submitLogin = new JButton("Submit");
        pane.add(submitLogin);
        submitLogin.setBounds(80,110,90,30);
        submitLogin.addActionListener(new AbstractAction(){
            public void actionPerformed(ActionEvent e)
            {
                if(submitLogin.getActionCommand() == "Submit")
                {
                    if(userText.getText().isEmpty() || passText.getText().isEmpty())
                    {   
                        errorLabel.setText("Enter UserName And Password");
                    }
                    else
                    {
                        //connection
                    }
                }
                else
                {
                    System.exit(0);
                }
            }
        });
        return pane;
    }
}

1 个答案:

答案 0 :(得分:0)

您对该代码有几个问题,包括:

  • 您没有在代码中向我们展示您尝试使用JScrollPane或甚至需要它的地方。如果您告诉我们您尝试使用此功能,我们会更好地了解您的问题。
  • 您正在使用空布局和setBounds(...),这是您应该以几乎所有代价避免的事情,以及如果您想使用JScrollPane必须避免的事情,因为JScrollPane不适用于null布局。而是阅读并使用布局管理器。
  • 您正在使用==运算符比较字符串。您不想使用==比较字符串。请改用equals(...)equalsIgnoreCase(...)方法。理解==检查两个对象是否相同而不是您感兴趣的。另一方面,这些方法检查两个字符串是否在同一个字符中具有相同的字符订单,这就是重要的事情。

  • 您可以在此处找到Swing教程和其他Swing资源的链接:Swing Info
  • 您可以在此处找到布局管理器教程:Layout Manager Tutorial
  • 您可以了解“嵌套”布局here
  • 您可以在此处找到有关如何使用JScrollPanes的具体信息:JScrollPane Tutorial
  • 它们的基本用法是,您需要将可滚动组件添加到JScrollPane的视口,然后将JScrollPane添加到GUI。有关如何执行此操作的详细信息将取决于您的需求,这是我们尚不了解的内容,但在我上面链接的教程中再次说明了这一点。