这是我第一次参与Swing。可能我做的事情严重错误。
我有一个标签式用户界面,每个标签位于JPanel
(此标签已添加到JTabbedPane
)。我根据用户输入在JTextField
中添加JPanel
个数。我需要JPanel
可滚动。我试过以下解决方案:
Jscrollpane
添加到Tab
Jpanel innerPanel
添加到JscrollPane
innerPanel
没有显示textField。
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);
}
}
非常感谢任何帮助。
EDIT
对于每个循环,我创建一个TextField,一个Slider,On Label。
当n很大时,我希望以下结构可垂直滚动
TextField1 Slider1 Label1
TextField2 Slider2 Label2
TextFieldn Slidern Labeln
答案 0 :(得分: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();
}
}