JPanel 使我的布局变形
JPanel deforms my Layout
我正在使用 NetBeans 为学校工作。我有一个巨大的 JPanel,其中包含一个巨大的 JFrame。该 JFrame 为 5 个小 JFrame,其中 1 个是带按钮的菜单,其他是带有文本的框,当我在按钮中选择时,这些文本将交换。
当一个盒子显示其他盒子是不可见的时,我使用以下代码(不知道它是否是最好的):
public ConversorUI() {
initComponents();
PanelVazio.setVisible(true);
PanelTemp.setVisible(false);
PanelComp.setVisible(false);
PanelMoedas.setVisible(false);
this.pack();
}
我的问题是,当我 运行 我的程序时,我有一个很大的 space,什么都没有,只有在它下面才会出现组件。我希望它们出现在我的 window 的顶部。我能做什么 ?
回答
经过一段时间的搜索后,我才意识到我可以将布局从 JPanel 设置为卡片布局,并在彼此之上创建 JPanel,并使用以下代码激活它们:
private void DinheiroButtonActionPerformed(java.awt.event.ActionEvent evt) {
//Remove Panels
CAIXA.removeAll();
CAIXA.repaint();
CAIXA.revalidate();
//Add Panels
CAIXA.add(DinheiroBox);
CAIXA.repaint();
CAIXA.revalidate();
}
一次可以加载一个jframe
因为您添加的每个 jframe 都有自己的位置并且可见性不会做任何删除
尝试保存每个 jframe 并进行更改
删除旧的并添加新的
看起来您正在使用 Java Swing,对吧?
如果您有包含 JFrames 的 JPanel,那么无论如何您都会做错事。要构建正确的 UI,您必须在 JFrame 中添加 JPanel。
此外,为了达到正确的组件顺序和放置,您需要配置相应的布局,here是说明。
为什么要使用多个 JFrames 来执行此操作?据我所知,使用可以处理单个任务(例如菜单和按钮等)的 JPanel 会是一个更好的主意。
我自己对使用 javax.swing 比较陌生,但据我所知,每个 window 一次只能有 1 帧(就像其他人说的那样)。
根据我从您的项目中可以看出的情况,您甚至可能不需要多个面板。您只需要一个带有按钮的菜单面板,以及根据按钮显示文本的多个标签或 JLabel。您可以在编写 addActionListener 时使用 setText 方法,如下所示:
buttonName.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
labelName.setText("blah blah blah");
//and whatever else you may need to do
}
});
我正在使用 NetBeans 为学校工作。我有一个巨大的 JPanel,其中包含一个巨大的 JFrame。该 JFrame 为 5 个小 JFrame,其中 1 个是带按钮的菜单,其他是带有文本的框,当我在按钮中选择时,这些文本将交换。 当一个盒子显示其他盒子是不可见的时,我使用以下代码(不知道它是否是最好的):
public ConversorUI() {
initComponents();
PanelVazio.setVisible(true);
PanelTemp.setVisible(false);
PanelComp.setVisible(false);
PanelMoedas.setVisible(false);
this.pack();
}
我的问题是,当我 运行 我的程序时,我有一个很大的 space,什么都没有,只有在它下面才会出现组件。我希望它们出现在我的 window 的顶部。我能做什么 ?
回答 经过一段时间的搜索后,我才意识到我可以将布局从 JPanel 设置为卡片布局,并在彼此之上创建 JPanel,并使用以下代码激活它们:
private void DinheiroButtonActionPerformed(java.awt.event.ActionEvent evt) {
//Remove Panels
CAIXA.removeAll();
CAIXA.repaint();
CAIXA.revalidate();
//Add Panels
CAIXA.add(DinheiroBox);
CAIXA.repaint();
CAIXA.revalidate();
}
一次可以加载一个jframe 因为您添加的每个 jframe 都有自己的位置并且可见性不会做任何删除 尝试保存每个 jframe 并进行更改 删除旧的并添加新的
看起来您正在使用 Java Swing,对吧?
如果您有包含 JFrames 的 JPanel,那么无论如何您都会做错事。要构建正确的 UI,您必须在 JFrame 中添加 JPanel。
此外,为了达到正确的组件顺序和放置,您需要配置相应的布局,here是说明。
为什么要使用多个 JFrames 来执行此操作?据我所知,使用可以处理单个任务(例如菜单和按钮等)的 JPanel 会是一个更好的主意。
我自己对使用 javax.swing 比较陌生,但据我所知,每个 window 一次只能有 1 帧(就像其他人说的那样)。
根据我从您的项目中可以看出的情况,您甚至可能不需要多个面板。您只需要一个带有按钮的菜单面板,以及根据按钮显示文本的多个标签或 JLabel。您可以在编写 addActionListener 时使用 setText 方法,如下所示:
buttonName.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
labelName.setText("blah blah blah");
//and whatever else you may need to do
}
});