这个问题与此非常相似:当有足够的空间来显示我尝试过的这个解决方案的内容时,jscrollpane不会顶部对齐,但它不起作用。
当我向jscrollpane添加jlabel时,当jlabel很小时,标签就居中了。当滚动条显示时,它工作正常。设置boxlayout不会更改任何内容。我觉得这不是正常工作,因为我设置了一个性能的大小面板?但如果我把线移开 panel.setPreferredSize(new Dimension((int)(screenSize.width*0.7 - 50), screenSize.height-150));
当没有文本时,标签会变小,并且会变大以容纳文本,这是我不想要的。如果我添加面板而不是标签,它会使屏幕滚动,即使没有文本?
这是我的密码:
public class Test {
// JFrame
static JFrame frame = new JFrame("Test");
//panel 1
static JPanel panel = new JPanel(new BorderLayout());
// label to display text
static JLabel label = new JLabel();
//scroll panel in main method
public static void main(String[] args) throws Exception {
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
label.setBorder(new EmptyBorder(5, 5, 5, 20));
label.setText("any text makes it centered beyond 40 lines");
//create panel
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
panel.add(label, BorderLayout.NORTH);
panel.add(Box.createVerticalGlue());
panel.setPreferredSize(new Dimension((int)(screenSize.width*0.7 - 50), screenSize.height-150));
panel.setBorder(new EmptyBorder(5, 5, 5, 10));
JScrollPane jspanel = new JScrollPane(label, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
//jspanel.add(label, BorderLayout.CENTER);
jspanel.setPreferredSize(new Dimension((int)(screenSize.width*0.7 - 70), screenSize.height-180));
jspanel.getVerticalScrollBar().setUnitIncrement(20);
jspanel.setBorder(BorderFactory.createEmptyBorder());
jspanel.setAlignmentX(JScrollPane.LEFT_ALIGNMENT);
jspanel.setAlignmentY(JScrollPane.TOP_ALIGNMENT);
//panel.setPreferredSize(new Dimension(640, 480));
//frame.add(panel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(jspanel);
frame.setSize((int)(screenSize.width*0.7), screenSize.height - 50);
frame.revalidate();
frame.pack();
frame.setVisible(true);
}
}
2条答案
按热度按时间mpbci0fu1#
在重新编写代码之后,我想到了以下gui。
我在电话里加了个电话
SwingUtilities
invokeLater
方法。此方法确保在事件调度线程上创建和执行所有swing组件。我消除了所有静态引用,除了
main
方法。我将您的代码重新编写为方法,以便一次只关注gui的一部分。
下面是完整的可运行示例。这是一个最小的可复制的例子。
k4ymrczo2#
这将在其父容器中对齐滚动窗格,具体取决于所使用的布局管理器。它不会影响添加到滚动窗格的任何组件的对齐方式。这是不需要的。
标签居中
标签的大小可以填充整个可用空间,因此需要自定义标签文本的绘制方式。
如果不想将其居中,则可以使用以下方法将其放置在顶部: