java - 为什么此代码不会在底部显示三个按钮的滚动 Pane 内显示内容

标签 java swing user-interface jframe jpanel

我已将 JFrame 设置为在 View 类末尾可见,但不确定为什么我的自定义 JPanel 仍然不可见。我正在尝试简化代码并避免使用庞大的 View 类,同时实现良好的面向对象编程风格。我的主面板中 JFrame 底部的 JButton 是可见的。我尝试将自定义面板添加到框架中,但它们仍然不可见。

我尝试将所有内容设置为可见,并且仅将自定义 JPanel 添加到 JFrame 中。

public View(Main pMain) 
{
    setMain(pMain);

    panelClientInfo = new JClientPanel();
    panelPaymentInfo = new JPaymentPanel();
    panelJobDescription = new JJobPanel();
    panelAgreement = new JAgreementPanel();
    clearButton = new JButton("Clear");
    exitButton = new JButton("Exit");
    submitButton = new JButton("Submit");
    panelSecondary = new JPanel();
    panelMain = new JPanel();
    scrollPane = new JScrollPane(panelMain);

    panelSecondary.setLayout(new BoxLayout(panelSecondary, 
    BoxLayout.Y_AXIS));
    panelSecondary.add(panelClientInfo);
    panelSecondary.add(panelJobDescription);
    panelSecondary.add(panelPaymentInfo);
    panelSecondary.add(panelAgreement);
    panelMain.add(panelSecondary, BorderLayout.CENTER);
    panelMain.add(clearButton, BorderLayout.SOUTH);
    panelMain.add(submitButton, BorderLayout.SOUTH);
    panelMain.add(exitButton, BorderLayout.SOUTH);
    scrollPane.add(panelMain);
    scrollPane.setVisible(true);


    setTitle("G.C. Septic Services Contract Drafter");
    setSize(1000, 1000);
    setResizable(false);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    add(scrollPane);

    setVisible(true);


}

/**Here is a custom JPanel that I am trying to use*/
package contractDrafter;
import javax.swing.JPanel;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class JAgreementPanel extends JPanel
{
JPanel panelMain;
JLabel submitterLabel;
JTextField submitterText;

public JAgreementPanel() 
{
    panelMain = new JPanel();
    panelMain.setLayout(new BoxLayout(panelMain, BoxLayout.Y_AXIS));
    submitterLabel = new JLabel("Submitter Name: ");
    submitterText = new JTextField("e.g: Calvin M. Cox", 30);

    panelMain.add(Box.createVerticalGlue());
    panelMain.add(submitterLabel);
    panelMain.add(Box.createVerticalGlue());
    panelMain.add(submitterText);
    panelMain.add(Box.createVerticalGlue());
}

}

我希望这个程序显示不同的 JPanel,这样我的岳母所要做的就是在已完成的程序中输入一些值,它就会为她写入文件,以减少她患有关节炎的手的工作量。我希望看到 JPanel 以半整齐到整齐的方式最终出现在框架上,以便她可以在框架上上下滚动并输入必要的信息。

最佳答案

你的代码包含很多缺失的类!当您发布代码时,至少要使用父类(super class),这样我们才能了解它是怎么回事。

无论如何

I have tried to just add the custom panels to the frame but they still are not visible.

这确实与你的代码冲突! 在代码中

panelMain.add(panelSecondary, BorderLayout.CENTER);
panelMain.add(clearButton, BorderLayout.SOUTH);
panelMain.add(submitButton, BorderLayout.SOUTH);
panelMain.add(exitButton, BorderLayout.SOUTH);

您传递的约束属于 BorderLayout,另一方面,您尚未将布局设置为 BorderLayout,因此默认情况下它是 FlowLayout

即使是 BorderLayout 添加相同的“边框”也会覆盖该边框中的最后一个组件!

您还没有上传图像,但我可以想象按钮在中心水平对齐,这是因为 JPanel 的默认 FlowLayout 布局。

I am hoping to see the JPanels end up on the frame in a semi-neat to neat way so that she can scroll up and down on the frame and enter the necessary information.

好吧,您正在使滚动 Pane 包含面板和按钮,这是完全错误的(至少在您的设计情况下)。

你应该做的是这样的

JFrame f = new JFrame();
JPanel slidingPanel = new JPanel ();
slidingPanel.setLayout(new BoxLayout(slidingPanel,BoxLayout.Y_AXSIS));
JScrollPane scrollPane = new JScrollPanel (slidingPanel);
f.getContentPane().add(scrollpane,BorderLayout.CENTER);
//then add all of your panels in the slidingpanel
JPanel buttonPanel = new JPanel();
//i can't give you a hint on this , it's almost just designer choice for how you want your buttons to layout
//but add them to the south !!
f.getContentPane().add(buttonPanel,BorderLayout.SOUTH);

如果您仍然需要一些额外的帮助来为您的家人处理您的项目,我很乐意为您提供帮助,但 Stack Overflow 不适合您,请在私有(private) github 存储库中上传您的项目,或者如果您已经有一个邀请我的项目,我的帐户的详细信息与我在这里的帐户相同;)。

关于java - 为什么此代码不会在底部显示三个按钮的滚动 Pane 内显示内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55940980/

相关文章:

java - retrofit 时禁用 SPDY 连接

java - HashMap奇怪的问题——重复对象

java - JToggleButton.其中一个已选定,其他已取消选定

ios - 如何制作 - 混合cornerRadius - Swift 5

java - 套接字因意外关闭而关闭

Java读取文件--文件/目录未找到

java - 在启用 jfilechooser 多文件选择器中打开对话框后,文件显示选定的文件

java - 在 swing 应用程序中使用多种语言

javascript - 以 "verification"模态显示形式和内容

ios - UINavigationBar 没有标题的自定义后退按钮