gpt4 book ai didi

java - 当有足够的空间来显示内容时,JScrollPane 不会顶部对齐

转载 作者:行者123 更新时间:2023-11-30 03:01:06 25 4
gpt4 key购买 nike

我有一个显示项目列表的 JScrollPane。如果屏幕上没有足够的空间来显示列表,我希望用户能够滚动列表,并且如果有足够的空间来显示,我希望列表与可用空间的顶部对齐列表。我可以做其中之一,但似乎无法同时工作。下面显示的代码实现了以下目标:如果列表大于可用空间但未与顶部对齐,则允许列表可滚动,如下所示。我尝试过将 JScrollPane 放在 borderlayout 的北部部分,但是当我这样做时,列表不再可滚动(即 borderlayout 为滚动 Pane 提供了所需的所有空间,并且列表现在不可滚动)。

以下是下面的代码创建的内容:

enter image description here

enter image description here

这是代码:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

public class Example {

public static void main(String[] args) {
JFrame jFrame = new JFrame();
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.setSize(400, 200);
// main panel
JPanel pan = new JPanel();
pan.setLayout(new GridLayout(1, 2));
pan.setBackground(Color.BLUE);
jFrame.getContentPane().add(pan, BorderLayout.CENTER);
jFrame.show();
// left panel
JPanel left = getContentPanel();
left.setBackground(Color.ORANGE);
pan.add(left);
// right panel (with scroll pane)
JPanel right = getContentPanel();
right.setBackground(Color.YELLOW);
JScrollPane scr = new JScrollPane(right);
scr.setBackground(Color.CYAN);
scr.setAlignmentX(JScrollPane.LEFT_ALIGNMENT);
scr.setAlignmentY(JScrollPane.TOP_ALIGNMENT);
pan.add(scr);
}

private static JPanel getContentPanel() {
JPanel rtn = new JPanel();
rtn.setLayout(new GridBagLayout());
GridBagConstraints cs = new GridBagConstraints();
cs.gridx = 0;
cs.weightx = 1;
cs.anchor = GridBagConstraints.NORTHWEST;
for (int i = 0; i < 20; i++) {
JLabel label = new JLabel("Item " + (i + 1));
label.setBackground(Color.DARK_GRAY);
cs.gridy = i;
rtn.add(label, cs);
}
rtn.setBackground(Color.GREEN);
return rtn;
}

}

最佳答案

您可以使用 Boxlayout。

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;

import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

public class Example {

public static void main(String[] args) {
JFrame jFrame = new JFrame();
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.setSize(400, 200);
// main panel
JPanel pan = new JPanel();
pan.setLayout(new GridLayout(1, 2));
pan.setBackground(Color.BLUE);
jFrame.getContentPane().add(pan, BorderLayout.CENTER);
jFrame.show();
// left panel
JPanel left = getContentPanel();
left.setBackground(Color.ORANGE);
pan.add(left);
// right panel (with scroll pane)
JPanel right = getContentPanel();
right.setBackground(Color.YELLOW);
JScrollPane scr = new JScrollPane(right);
scr.setBackground(Color.CYAN);
scr.setAlignmentX(JScrollPane.LEFT_ALIGNMENT);
scr.setAlignmentY(JScrollPane.TOP_ALIGNMENT);
pan.add(scr);
}

private static JPanel getContentPanel() {
JPanel rtn = new JPanel();

rtn.setLayout(new BoxLayout(rtn, BoxLayout.Y_AXIS));

for (int i = 0; i < 20; i++) {
JLabel label = new JLabel("Item " + (i + 1));
label.setBackground(Color.DARK_GRAY);
rtn.add(label);
}

rtn.add(Box.createVerticalGlue());

rtn.setBackground(Color.GREEN);
return rtn;
}

}

关于java - 当有足够的空间来显示内容时,JScrollPane 不会顶部对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35941320/

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