Java 向下滚动JPanel
我正在尝试为预算项目创建一个动态条目列表。 最初,这个列表中应该有10个项目,我想 为用户提供添加更多项目并使面板可滚动的选项。 每个项目都是一个包含1个标签和1个文本框的面板 我的问题是,我将主面板的布局设置为网格,将列数设置为2,行数设置为0,当向该面板添加第11项时,它会创建一个新行,这很好,但向该面板添加内容时面板的“视图”变宽 我希望面板的“视图”保持不变,并且能够向下滚动查看其他内容 这是我的密码:Java 向下滚动JPanel,java,swing,list,user-interface,jpanel,Java,Swing,List,User Interface,Jpanel,我正在尝试为预算项目创建一个动态条目列表。 最初,这个列表中应该有10个项目,我想 为用户提供添加更多项目并使面板可滚动的选项。 每个项目都是一个包含1个标签和1个文本框的面板 我的问题是,我将主面板的布局设置为网格,将列数设置为2,行数设置为0,当向该面板添加第11项时,它会创建一个新行,这很好,但向该面板添加内容时面板的“视图”变宽 我希望面板的“视图”保持不变,并且能够向下滚动查看其他内容 这是我的密码: private void AddButtonActionPerformed(java
private void AddButtonActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
javax.swing.JPanel newCategoryPanel = new javax.swing.JPanel();
javax.swing.JLabel newLabel = new javax.swing.JLabel();
javax.swing.JTextField newTextField = new javax.swing.JTextField();
newCategoryPanel.setLayout(new java.awt.GridLayout(1, 2));
newLabel.setText("Poop :)"); //for testing
newCategoryPanel.add(newLabel);
newTextField.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
}
});
newCategoryPanel.add(newTextField);
panel1.add(newCategoryPanel);
panel1.revalidate();
}
要在滚动面板中设置固定面板,您应该在
JScrollPane
上调用setPreferredSize
,要掌握灵活的布局管理器,请尝试MigLayout它很简单,您可以使用它做所有您想做的事情,下面是一些代码:
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import net.miginfocom.swing.MigLayout;
public class Test {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame t = new JFrame();
t.setBounds(100, 100, 500, 500);
t.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel global = new JPanel();
global.setLayout(new MigLayout("wrap 1", "", ""));
JButton add = new JButton("Add");
JPanel listItems = new JPanel();
listItems.setLayout(new MigLayout("wrap 2", "[]20[]", ""));
add.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JLabel label = new JLabel("Item Label");
JTextField text = new JTextField("Value", 20);
listItems.add(label);
listItems.add(text);
global.validate();
}
});
global.add(add);
JScrollPane scroll = new JScrollPane(listItems);
scroll.setPreferredSize(new Dimension(400, 600));
global.add(scroll);
t.add(global);
t.setVisible(true);
}
});
}
}
结果是:
将JPanel放在JScrollPane中,并将JPanel的布局设置为
GridLayout(0,2)
.1。考虑使用<代码> jTabe>代码>。2.考虑编辑你以前的,而不是做一个新的。