我已将 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/