gpt4 book ai didi

java - 使用滚动条动态显示面板的布局

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:53:56 27 4
gpt4 key购买 nike

在 java 中,我一直在尝试创建一个可以接受其他带有滚动条的面板的面板。

我尝试使用 gridlayout,效果很好,除了如果我只添加几个面板,它会增加这些面板以适应父面板的大小。

我尝试使用 flowlayout,但这会使面板水平流动,因为存在滚动条。

我该怎么做才能将面板添加到从顶部开始的父面板,并使它们始终具有相同的大小(或它们的首选大小)。

另外,当我在事件后将面板添加到父面板时,它们直到我移动或调整表单大小后才会出现。我如何让它重绘?对其调用 repaint() 无效。

最佳答案

Constrained Grid

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;

/** This lays out components in a column that is constrained to the
top of an area, like the entries in a list or table. It uses a GridLayout
for the main components, thus ensuring they are each of the same size.
For variable height components, a BoxLayout would be better. */
class ConstrainedGrid {

ConstrainedGrid() {
final JPanel gui = new JPanel(new BorderLayout(5,5));
gui.setBorder(new EmptyBorder(3,3,3,3));
gui.setBackground(Color.red);

JPanel scrollPanel = new JPanel(new BorderLayout(2,2));
scrollPanel.setBackground(Color.green);
scrollPanel.add(new JLabel("Center"), BorderLayout.CENTER);
gui.add(new JScrollPane(scrollPanel), BorderLayout.CENTER);

final JPanel componentPanel = new JPanel(new GridLayout(0,1,3,3));
componentPanel.setBackground(Color.orange);
scrollPanel.add(componentPanel, BorderLayout.NORTH);

JButton add = new JButton("Add");
gui.add(add, BorderLayout.NORTH);
add.addActionListener( new ActionListener() {
public void actionPerformed(ActionEvent ae) {
componentPanel.add(new JTextField());
gui.validate();
}
});

Dimension d = gui.getPreferredSize();
d = new Dimension(d.width, d.height+100);
gui.setPreferredSize(d);

JOptionPane.showMessageDialog(null, gui);
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
ConstrainedGrid cg = new ConstrainedGrid();
}
});
}
}

关于java - 使用滚动条动态显示面板的布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7949363/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com