【发布时间】:2019-08-02 21:24:08
【问题描述】:
我在使用 GUI 时遇到了两个不同的问题。 第一个是:如何获取容器组件?我想从 BorderLayout 获得 5 个组件(并且更喜欢让它们了解布局中的位置,例如:CENER、NORTH、SOUTH、EAST、WEST 第二个是:我想“计算” gui 布局,同时调整容器的大小,而不仅仅是现在它已经弯腰调整大小。我该怎么做?
对于第一个问题,我尝试使用 getComponenets() 方法,但它返回许多组件,而没有关于组件在布局中的位置的任何信息。 对于第二个问题,当我实现方法 componentResized() 时,仅在调整大小过程结束时才会触发事件,但我想为容器中的每个更改计算布局
public class GridLayoutFrame extends JFrame
{
LabelAndJtextAreaPanel topPanel;
//KeyboardbuttonPanel buttomPanel ;
public GridLayoutFrame ()
{
super("Typing Application");
setLayout(new GridLayout());
topPanel = new LabelAndJtextAreaPanel();
add(topPanel);
addComponentListener(new ComponentAdapter() {
public void componentResized(ComponentEvent e) {
System.out.println("componentResized\n");
// want to put here many calculation during JFrame is resized
}
}
);
*/
setSize(300,200);
setVisible(true);
}
public static void main(String[] args)
{
GridLayoutFrame frame = new GridLayoutFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
【问题讨论】:
-
你能发布你的代码吗?
-
当我实现方法 componentResized() 时,只有在调整大小过程结束时才会触发事件, - 我收到多个事件。发布您的minimal reproducible example 来证明问题。
-
我从代码中添加了一个片段...我正在尝试使用演示计算机键盘的 gui 构建应用程序。并且因为在每一行中都有不同数量的键,并且其中一些键的大小不同,所以我决定对键盘中的每个“行”使用 FlowLayout。我希望按键会根据 JFrame 大小的变化而放大/缩小。是不是一种在大小更改期间而不是仅在更改结束时收听 JFrame 大小更改的方法?
-
那不是 MRE。代码没有事件编译,所以你怎么测试它?对于在 Windows 7 上使用 JDK8 的我来说,我在调整框架大小时不断调用 componentResized(...) 方法。
-
@camick,它仅在调整大小完成后才有效,但在调整大小期间没有任何反应!我想要 JFrame 边缘的同时站立,按下鼠标左键(不释放)并移动鼠标,我将能够为每次移动进行计算,而不仅仅是在释放鼠标时!
标签: java swing user-interface layout jframe