當我呼叫一個方法來創建一個 Jpanel 物件和一個 GridBagLayout 物件,并將我的 JFrame 的背景設定為青色。我收到 stackOverFlow 錯誤,我相信這是由于 setBackground 函式試圖設定面板背景以外的容器的背景,例如我的按鈕,這就是導致錯誤的原因,我已嘗試將該函式放入另一個JPanel但沒有avial。我的問題是,我可以在我的代碼中做些什么來修復發生的 StackOverFlow 錯誤,我是否需要為背景創建一個新面板。
代碼 :
擺動方法:
public JFrame frame(){
JFrame frame = new JFrame();
frame.setTitle("a new " MethodHandles.lookup().lookupClass().getName() " Appears! ");
return frame;
}
public JPanel mainPanel(){
JPanel mainPanel = new JPanel();
mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
//mainPanel().setBackground(Color.cyan);
return mainPanel;
}
public JPanel panel(){
JPanel panel = new JPanel(new GridBagLayout());
panel().setBackground(Color.cyan);
return panel;
}
public GridBagConstraints constr(){
GridBagConstraints constr = new GridBagConstraints();
return constr;
}
類呼叫方法:
static void AddWindow(){
Options OPT = new Options();
Tutors TRS = new Tutors();
/*JFrame frame = new JFrame();
frame.setTitle("a new " MethodHandles.lookup().lookupClass().getName() " Appears! ");
JPanel mainPanel = new JPanel();
mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));*/
// JPanel panel = new JPanel(new GridBagLayout());
//panel.setBackground(Color.cyan);
OPT.frame();
OPT.mainPanel();
OPT.panel();
OPT.constr();
// Constraints for the layout
//GridBagConstraints constr = new GridBagConstraints();
// Setting initial grid values to 0,0
/////////// first columns ///////////////////////
OPT.constr().weightx = 0.5;
OPT.constr().weighty = 0.5;
OPT.constr().gridx = 0;
OPT.constr().gridy = 0;
OPT.panel().add(OPT.NamesText(), OPT.constr());
OPT.constr().gridx = 0;
OPT.constr().gridy = 1;
OPT.panel().add(OPT.ModuleNameText(), OPT.constr());
OPT.constr().gridx = 0;
OPT.constr().gridy = 2;
OPT.panel().add(OPT.PostitionText(), OPT.constr());
OPT.constr().gridx = 0;
OPT.constr().gridy = 3;
OPT.panel().add(OPT.AreaOfExpertiseText(), OPT.constr());
OPT.constr().gridx = 0;
OPT.constr().gridy = 4;
OPT.panel().add(OPT.StudentsSupervisedText(), OPT.constr());
/////////// second column ////////////////////
OPT.constr().gridx = 1;
OPT.constr().gridy = 0;
OPT.panel().add(OPT.Names(), OPT.constr());
OPT.constr().gridx = 1;
OPT.constr().gridy = 1;
OPT.panel().add(OPT.ModuleName(), OPT.constr());
OPT.constr().gridx = 1;
OPT.constr().gridy = 2;
OPT.panel().add(OPT.Position(), OPT.constr());
OPT.constr().gridx = 1;
OPT.constr().gridy = 3;
OPT.panel().add(OPT.AreaOfExperise(), OPT.constr());
OPT.constr().gridx = 1;
OPT.constr().gridy = 4;
OPT.panel().add(OPT.StudentsSupervised(), OPT.constr());
OPT.constr().gridx = 1;
OPT.constr().gridy = 5;
OPT.panel().add(OPT.SubmitButton(), OPT.constr());
OPT.mainPanel().add(OPT.panel());
OPT.frame().add(OPT.mainPanel());
OPT.frame().pack();
OPT.frame().setSize(800,800);
OPT.frame().setLocationRelativeTo(null);
OPT.frame().setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
OPT.frame().setVisible(true);
}
uj5u.com熱心網友回復:
每次你呼叫這個方法時,它都會呼叫自己直到它崩潰......
public JPanel panel(){
JPanel panel = new JPanel(new GridBagLayout());
panel().setBackground(Color.cyan);
return panel;
}
這可能是考慮將這些方法重命名為類似的好時機 getXxx
謝謝,那行得通:),現在框架運行它是完全空的,但是當我在類中創建所有物件時它作業正常,是否有可能從類外部呼叫方法由于物件不是在同一個類中創建的?
每次呼叫其中一個方法時,都會創建該物件的一個??新實體。
這個...
OPT.getFrame().pack();
OPT.getFrame().setSize(800, 800);
OPT.getFrame().setLocationRelativeTo(null);
OPT.getFrame().setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
OPT.getFrame().setVisible(true);
單獨創建 5 個單獨的 a 實體,JFrame其中沒有一個與前一個有任何關系
相反,您應該考慮重新設計解決方案以隔離功能或使用“惰性”屬性,例如...
public class Options {
private JFrame frame;
private JPanel mainPanel;
private JPanel panel;
private GridBagConstraints gbc;
public JFrame getFrame() {
if (frame == null) {
frame = new JFrame();
frame.setTitle("a new " MethodHandles.lookup().lookupClass().getName() " Appears! ");
}
return frame;
}
public JPanel getMainPanel() {
if (mainPanel == null) {
mainPanel = new JPanel();
mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
//mainPanel().setBackground(Color.cyan);
}
return mainPanel;
}
public JPanel getPanel() {
if (panel == null) {
panel = new JPanel(new GridBagLayout());
panel.setBackground(Color.cyan);
}
return panel;
}
public GridBagConstraints getGridBagConstraints() {
if (gbc == null) {
gbc = new GridBagConstraints();
}
return gbc;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/359102.html
上一篇:我想在JavaSwing中用JButtons制作一個六邊形表
下一篇:分割窗格Java的實時調整
