Java - Swing - 充满组件的窗口

Posted

技术标签:

【中文标题】Java - Swing - 充满组件的窗口【英文标题】:Java - Swing - window full of components 【发布时间】:2016-08-26 12:33:55 【问题描述】:

我有一个 JFrame、JPanel 和一个 JButton,按钮在面板中的坐标(100、1000)处,面板(具有绝对布局)在框架中,并且框架的尺寸为(500、500)。我想要的是能够滚动窗口以到达窗口底部下方的按钮。这是代码:

public static void main(String...args)

    JFrame frame = new JFrame();
    JPanel panel = new JPanel();
    JButton button = new JButton("Test");

    frame.setSize(500, 500);
    frame.getContentPane().add(panel);

    panel.setLayout(null);

    button.setBounds(100, 1000, 100, 30);
    panel.add(button);

如何才能滚动窗口以到达按钮?你能用这个按钮写一个简单的代码吗?

【问题讨论】:

Java GUI 必须在不同的操作系统、屏幕尺寸、屏幕分辨率等上使用不同的语言环境中的不同 PLAF。因此,它们不利于像素完美布局。而是使用布局管理器,或 combinations of them 以及 white space 的布局填充和边框。 “你能写一个简单的代码吗”我当然可以。但 SO 不是您的个人代码生成服务。 【参考方案1】:

您可以简单地使用 JScrollPane。 P.S:我不明白为什么你为按钮的 Y 位置设置 1000,即使你的框架大小为 500

JScrollPane jYourScrollPane = new JScrollPane(panel);
frame.add(jYourScrollPane);

编辑:setLayout(null);使您的面板布局绝对。检查这些答案answer1answer2

【讨论】:

它不起作用,它出现一个没有scrollPane的窗口 JFrame wnd = new JFrame(); JPanel 面板 = 新 JPanel(); JButton 按钮 = new JButton("Test"); JScrollPane 滚动 = 新 JScrollPane(面板); button.setBounds(100, 1000, 70, 30); panel.setLayout(null); panel.add(按钮); wnd.setSize(600, 500); wnd.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); wnd.add(滚动); wnd.setVisible(true); 为你编辑了我的答案@TommasoSalvetti【参考方案2】:
this.revalidate();  //for swing.

应该更新你的框架并让你的按钮等显示出来。

【讨论】:

以上是关于Java - Swing - 充满组件的窗口的主要内容,如果未能解决你的问题,请参考以下文章

java的swing组件的使用

java swing 事件问题

java GUI编程(swing)之一 swing简单介绍

关于Java swing组件焦点的问题(我猜可能是焦点的问题) 高分求全面

java窗口编程

JAVA-基础(十) Swing