【问题标题】:JScrollPane not workingJScrollPane 不工作
【发布时间】:2013-10-04 20:39:08
【问题描述】:

这是我第一次在 Swing 上工作。可能我做错了什么。
我有一个选项卡式 UI,其中每个选项卡都是 JPanel(此选项卡已添加到 JTabbedPane)。我根据用户输入在JPanel 中添加JTextFields 的数量。我需要 JPanel 可以滚动。我尝试了以下解决方案:

  • Jscrollpane添加到Tab
  • 将新的Jpanel innerPanel 添加到JscrollPane
  • 将所有文本字段添加到innerPanel

没有显示文本字段。

public Tab extends JPanel {

    private TipTailoringTab() {
        JPanel innerPanel =new JPanel();

        int y_cord = 20;
        for (int i = 0; i < USER_INPUT; i++) {
                JTextField TextField = new JTextField();
                TextField.setBounds(42, y_cord, 100, 20);
                innerPanel.add(TextField);
                y_cord = y_cord + 40;
        }
        Dimension preferredSize = new Dimension(400, 600);
        innerPanel.setPreferredSize(preferredSize);
        JScrollPane sPane = new JScrollPane(innerPanel);
        Dimension preferredSize1 = new Dimension(400, 300);
        sPane.setPreferredSize(preferredSize1);
        this.add(sPane);
    }
}

非常感谢任何帮助。

编辑
对于每个循环,我创建一个 TextField、一个 Slider、On Label。 当 n 很大时,我希望以下结构可以垂直滚动
TextField1 Slider1 Label1
TextField2 Slider2 Label2

TextFieldn 滑块标签

【问题讨论】:

  • 1) 您需要学习如何使用布局管理器并最大限度地利用它们。 2) 您不想设置任何组件的边界,尤其是在使用默认 FlowLayout 的 JPanel 上。 3)如果仍然卡住,创建并发布sscce
  • 与 Hovercraft 一致,scoll 窗格严重依赖于视图布局生成的信息
  • 我已经准备好及时提交了,但我今天已经提交了,这是唯一剩下的部分。当前解决方案是否有解决方法?我将重新审视并改进我的解决方案。
  • 标签中的文本字段应该如何对齐?
  • TextFields 要垂直对齐。每行将有一个文本字段、一个滑块和一个标签。

标签: java swing jpanel jscrollpane jtabbedpane


【解决方案1】:

这是一个非常简单的例子。我设置了首选大小,以便它强制滚动条变得可见/需要。有任何问题都可以问。

import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.*;

public class Test {
    private static final int USER_INPUT = 10;

    public Test() {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setResizable(false);


        JTabbedPane tabs = new JTabbedPane();
        tabs.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
        for (int i = 0; i < 5; i++) {
            tabs.addTab("Tab"+i, new TabPanel());
        }

        frame.add(tabs);
        frame.pack();
        frame.setVisible(true);
    }

    class TabPanel extends JPanel {    
        public TabPanel() {
            JPanel innerPanel = new JPanel();
            innerPanel.setLayout(new BoxLayout(innerPanel, BoxLayout.Y_AXIS));

            for (int i = 0; i < USER_INPUT; i++) {
                JPanel p = new JPanel(new BorderLayout());
                JLabel label = new JLabel("Label"+i);
                JTextField textArea = new JTextField();
                p.add(label, BorderLayout.NORTH);
                p.add(textArea, BorderLayout.CENTER);
                innerPanel.add(p);
            }

            JScrollPane scrollPane = new JScrollPane(innerPanel);
            scrollPane.setPreferredSize(new Dimension(400, 200));
            this.add(scrollPane);
        }
    }

    public static void main(String[] args) {
        new Test();
    }
}

【讨论】:

  • 滚动已启用,但还有其他问题。我想在每一行中显示一个文本字段、一个滑块和一个标签。现在一切都被扭曲了。所有文本字段、滑块和标签都在一个垂直列中。
  • 等等什么?所以每个选项卡只有一个文本字段并且该文本字段是可滚动的?在可滚动文本字段上方有一个标签?
  • 谢谢,但仍然是标签,文本字段仍然不在一行中并且扭曲了。我也尝试设置尺寸。
  • 我将标签和文本区域设置在一个之上。将 BorderLayout.North/center 更改为 west/east。而且我不知道您所说的失真的确切含义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-03
  • 2015-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多