【问题标题】:Scrolling down a JPanel向下滚动 JPanel
【发布时间】:2014-11-28 19:59:11
【问题描述】:

我正在尝试为预算计划制作一个动态条目列表。 最初应该在这个列表中有 10 个项目,我想 为用户提供添加更多项目并使面板可滚动的选项。 每个项目都是一个包含 1 个标签和 1 个文本框的面板。

我的问题是我将主面板的布局设置为网格,并且我已将列数设置为 2,将行数设置为 0,当向此面板添加第 11 个项目时,它会创建一个新行,这很好,但在向此面板添加内容时,面板的“视图”会变宽。

我想让面板的“视图”保持相同的大小,并且能够向下滚动以查看其其他内容。

这是我的代码:

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();

} 

【问题讨论】:

  • 把JPanel放到一个JScrollPane里面,设置JPanel的布局为GridLayout(0, 2)
  • 1.考虑使用JTable。 2. 考虑编辑你以前的old question 而不是新建一个。

标签: java swing list user-interface jpanel


【解决方案1】:

要在滚动面板中固定面板,您应该在 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);
            }
        });
    }
}

结果:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-22
  • 2023-03-08
  • 2010-11-26
  • 1970-01-01
相关资源
最近更新 更多