JScrollPane不想滚动

时间:2018-04-03 11:21:40

标签: java scroll jpanel jtextfield jscrollpane

我是Java新手,这是我的第一个项目,所以看起来似乎是一个愚蠢的问题。

我在这个论坛和其他论坛上尝试了其他解决方案,但它没有帮助我。

我正在构建一个具有多个JTextField的系统,但我无法让我的JScrollPane向下滚动以查看其他文本字段。

我在下面插入了我的代码:

    private void initialize() {

    frmBudsAndTastebuds = new JFrame();
    frmBudsAndTastebuds.setResizable(true);
    frmBudsAndTastebuds.setTitle("Buds and Tastebuds");
    frmBudsAndTastebuds.getContentPane().setName("Buds and Tastebuds");
    frmBudsAndTastebuds.getContentPane().setBackground(Color.PINK);
    frmBudsAndTastebuds.setBounds(100, 100, 1378, 706);
    frmBudsAndTastebuds.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frmBudsAndTastebuds.setLocation(0, 0);
    frmBudsAndTastebuds.getContentPane().setLayout(null);

    JLabel lblBudsAndTastebuds = new JLabel("Buds and Tastebuds Invoice System");
    lblBudsAndTastebuds.setFont(new Font("Tw Cen MT Condensed Extra Bold", Font.PLAIN, 22));
    lblBudsAndTastebuds.setBounds(335, 11, 309, 25);
    frmBudsAndTastebuds.getContentPane().add(lblBudsAndTastebuds);

    JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
    tabbedPane.setBorder(null);
    tabbedPane.setVerifyInputWhenFocusTarget(false);
    tabbedPane.setBounds(0, 47, 1362, 627);
    frmBudsAndTastebuds.getContentPane().add(tabbedPane);

    JPanel panel = new JPanel();
    panel.setBorder(new LineBorder(new Color(0, 0, 0)));
    panel.setBackground(Color.PINK);
    tabbedPane.addTab("Invoice", null, panel, "Invoice");
    tabbedPane.setBackgroundAt(0, Color.WHITE);
    tabbedPane.setForegroundAt(0, Color.BLACK);
    panel.setLayout(null);

    JPanel panel_2 = new JPanel();
    panel_2.setLayout(null);
    panel_2.setVisible(false);

    JScrollPane scrollPane = new JScrollPane(panel_2);
scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
    scrollPane.setBounds(10, 256, 990, 332);
    scrollPane.setViewportView(panel_2);
    panel.add(scrollPane);

1 个答案:

答案 0 :(得分:0)

查看上面的代码,您似乎已经创建了一个JFrame并为其添加了多个选项卡,第一个选项卡是" Invoice"。我假设您希望Invoice选项卡具有多个需要可滚动的JTextField和JLabel。我强烈建议你使用像" panel"这样的名字。和" panel2"。这根本不是好编码。未来的开发人员需要花费很长时间将事物映射到其他事物并识别上下文。

JPanel panel = new JPanel(); 
panel.setBorder(new LineBorder(new Color(0, 0, 0)));`
panel.setBackground(Color.PINK);

我假设这是你要添加JTextFields和JLabel的JPanel。您需要了解的第一件事是,要使JScrolledPane工作,您需要将所有标签和文本字段添加到Panel,并将该Panel添加到JScrolledPane并将该窗格添加到JTabbedPane,以便它可以滚动。所以这样做:

JFrame mainFrame = new JFrame();
//Create all your other stuff for your frame.

//Create your JTabbedPane
JTabbedPane tabPane = new JTabbedPane();

//Create your invoice Panel
JPanel invoicePanel = new JPanel();

//Create your JLabels and Jtextfields and add them to your invoicePanel
invoicePanel.add(/*your object here for labels*/);

//Create your JScrollPane
JScrollPane invoiceScroll = new JScrollPane(invoicePanel,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS ); 
//Adds the scrolling in vertical direction always and never in the horizontal direction.

//Add the scrollPane to the tab.
tabPane.addTab("Invoice", null, invoiceScroll, "Invoice");


//Add the tabPane to your main frame.
mainFrame.getContentPane().add(tabPane);

上面的代码会将您的标签添加到具有滚动功能的Frame。如果要向选项卡内的某些部分添加其他滚动,请创建一个JScrollPane,并将需要位于滚动区域内的所有项目添加到该窗格,并将该窗格添加到该面板。还要记住,有时候,滚动可能无法在Null Layout上工作,因此我建议为您创建的每个面板创建一个布局。希望这可以帮助。如果您有任何后续问题,请回复此答案。