问题描述
我快要领养老金了,我对我们可以为工程目的购买的程序感到沮丧。通常,它们并不完全是我们想要的。 所以作为老手,我开始用 Java 编写自己的程序。也因为它对我来说很有趣。
我想让程序灵活重用。
我正在做一个计算,为此我们需要在程序中输入基本的工程数据。因此,我在循环中使用 JTextField
在“A_DesignDataBasisInvoer”类中进行输入,并将它们显示在 MainFrame 类中的“MiddenPaneel”上。
在“BesturingLinkerKnoppenPaneel”类中,我想在按下“保存”按钮时读取“A_DesignDataBasisInvoer”中的文本字段并将它们传输到 A_BasisDataASME 类进行存储。
从存储中,我想在 RechterPaneel 中显示数据,以显示我正在使用的数据。
听起来很复杂,但如果我将所有 JTextField 分开编程,它就可以工作。那不是我想要的。比我不能重用类。
类文件:
-
MainFrame
:在此处设置 JFrame 和 JPanel 我在面板中加载“BesturingLinkerKnoppenPaneel”和“A_DesignBasisInvoer” BesturingLinkerKnoppenPaneel.java:制作用于保存数据的 JButton,并在将来导出时写入文件。 -
A_DesignBasisInvoer
:制作输入字段和描述并将其写入 MiddenPaneel -
A_BasisDataASME
:临时存储数据以转移到其他类
我的问题!
如果我将所有文本字段分开,我可以读取它们并传输到其他文件。 但是,如果我对文本字段使用循环并将它们添加到数组中,则会出错,我会在文件 BesturingLinkerKnoppenPaneel 的底部看到粉红色文本。
我知道我做错了但找不到。感谢所有评论!
private JPanel contentPane;
/*--------------------------------------------------------------------------------------------------------------------------------------
* BELOW Call FILES IN CLASS
*--------------------------------------------------------------------------------------------------------------------------------------
*/
BesturingLinkerKnoppenPaneel besturingLinkerKnoppenPaneel = new BesturingLinkerKnoppenPaneel();
A_BasisDataASME a_BasisDataASME = new A_BasisDataASME();
A_DesignDataBasisInvoer a_DesignDataBasisInvoer = new A_DesignDataBasisInvoer();
static JTextArea informatieTekst = new JTextArea();
/*--------------------------------------------------------------------------------------------------------------------------------------
* BELOW IN THE CONSTRUCTOR BUILD SCREEN WITH PANELS
*--------------------------------------------------------------------------------------------------------------------------------------
*/
public MainFrame(String calculationCode,String TekstMainPanel)
{
String calculationCodeVoorFrameTitel = calculationCode;
/*--------------------------------------------------------------------------------------------------------------------------------------
* LOAD CLASS SCHERMCONSTANTEN FOR SIZING
* --------------------------------------------------------------------------------------------------------------------------------------
*/
SchermConstanten schermConstanten = new SchermConstanten();
int scherminstellingen[] = schermConstanten.getschermConstanten();
Font font = new Font("Arial",Font.PLAIN,scherminstellingen[16]);
Font fontBold = new Font("Arial",Font.BOLD,scherminstellingen[16]);
/*--------------------------------------------------------------------------------------------------------------------------------------
* DE FRAME / ContentPane SETUP
* --------------------------------------------------------------------------------------------------------------------------------------
*/
setTitle(calculationCodeVoorFrameTitel);
setMinimumSize(new Dimension(1900,1200));
setMaximumSize(new Dimension(scherminstellingen[0],scherminstellingen[1]+35));
setBounds(scherminstellingen[2],scherminstellingen[3],scherminstellingen[0],scherminstellingen[1]+35);
setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
contentPane = new JPanel();
contentPane.setBackground( Color.decode("#DCDCDC"));
contentPane.setLayout(null);
/*--------------------------------------------------------------------------------------------------------------------------------------
* SETUP PANELS
* --------------------------------------------------------------------------------------------------------------------------------------
*/
JPanel LinkerPaneel = new JPanel();
LinkerPaneel.setLayout(new BoxLayout(LinkerPaneel,BoxLayout.Y_AXIS));
LinkerPaneel.setPreferredSize(new Dimension(scherminstellingen[8],scherminstellingen[9]));
LinkerPaneel.setBounds(10,scherminstellingen[5]+20,scherminstellingen[8],scherminstellingen[9]);
LinkerPaneel.setBorder(new EtchedBorder(EtchedBorder.RAISED,null,null));
LinkerPaneel.setBackground(Color.decode("#D3D3D3"));
LinkerPaneel.setopaque(false);
LinkerPaneel.setVisible(true);
JPanel MiddenPaneel = new JPanel();
MiddenPaneel.setLayout(new FlowLayout(FlowLayout.LEFT));
MiddenPaneel.setPreferredSize(new Dimension(scherminstellingen[12],scherminstellingen[9]));
MiddenPaneel.setBounds(scherminstellingen[8]+20,scherminstellingen[12],scherminstellingen[9]);
MiddenPaneel.setBorder(new EtchedBorder(EtchedBorder.RAISED,null));
MiddenPaneel.setBackground(Color.decode("#D3D3D3"));
MiddenPaneel.setopaque(true);
MiddenPaneel.setVisible(true);
JPanel RechterPaneel = new JPanel();
RechterPaneel.setLayout(new FlowLayout(FlowLayout.LEFT));
RechterPaneel.setPreferredSize(new Dimension(scherminstellingen[14],scherminstellingen[15]));
RechterPaneel.setBounds(scherminstellingen[8]+scherminstellingen[12]+30,scherminstellingen[14],scherminstellingen[15]);
RechterPaneel.setBorder(new EtchedBorder(EtchedBorder.RAISED,null));
RechterPaneel.setBackground(Color.decode("#D3D3D3"));
RechterPaneel.setopaque(true);
RechterPaneel.setVisible(true);
contentPane.add(MiddenPaneel,BorderLayout.CENTER);
contentPane.add(LinkerPaneel,BorderLayout.WEST);
contentPane.add(RechterPaneel,BorderLayout.EAST);
setContentPane(contentPane);
//END LAYOUT PANEEL
/*--------------------------------------------------------------------------------------------------------------------------------------
* LOAD BASIS DATA ON SCREEN
* --------------------------------------------------------------------------------------------------------------------------------------
*/
a_DesignDataBasisInvoer = new A_DesignDataBasisInvoer(calculationCodeVoorFrameTitel);
a_DesignDataBasisInvoer.setBackground(Color.decode("#D3D3D3"));
MiddenPaneel.add(a_DesignDataBasisInvoer);
/*--------------------------------------------------------------------------------------------------------------------------------------
* LOAD JBUTTON BAR AT THE LEFT SCREEN
* --------------------------------------------------------------------------------------------------------------------------------------
*/
besturingLinkerKnoppenPaneel = new BesturingLinkerKnoppenPaneel();
besturingLinkerKnoppenPaneel.setBackground(Color.decode("#D3D3D3"));
LinkerPaneel.add(besturingLinkerKnoppenPaneel);
}
}
public class BesturingLinkerKnoppenPaneel extends JPanel implements ActionListener {
public static final long serialVersionUID = 1L;
private static final Object[] Input = null;
static JTextField[] BasisDataInv;
//private ArrayList<Double> invoer = new ArrayList<Double>();
ArrayList<JTextField> invoer = new ArrayList<JTextField>();
// private List<Contact> list = new ArrayList<Contact>();
JButton LeftSaveBtn;
SchermConstanten schermConstanten = new SchermConstanten();
/*--------------------------------------------------------------------------------------------------------------------------------------
* CALL FILES
*--------------------------------------------------------------------------------------------------------------------------------------
*/
A_BasisDataASME a_BasisDataASME = new A_BasisDataASME();
A_DesignDataBasisInvoer a_DesignDataBasisInvoer = new A_DesignDataBasisInvoer();
/*--------------------------------------------------------------------------------------------------------------------------------------
* DE CONSTRUCTOR
* --------------------------------------------------------------------------------------------------------------------------------------
*/
public BesturingLinkerKnoppenPaneel() {
int scherminstellingen[] = schermConstanten.getschermConstanten();
Font font = new Font("Arial",scherminstellingen[16]);
LeftSaveBtn = new JButton("Save");
LeftSaveBtn.setBounds(0,50,30);
add(LeftSaveBtn);
LeftSaveBtn.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent e)
{
JButton clicked = (JButton)e.getSource();
if (clicked == LeftSaveBtn)
{
/*--------------------------------------------------------------------------------------------------------------------------------------
* OVERHERE I WANT TO LOAD ALL JTEXTFIELDS FROM THE FILE "A_DesignDataBasisInvoer"
* AND WRITE THEM IN AN ARRAY OR ARRAYLIST AND TRANSFER TO THE FILE "A_BasisDataASME" FOR STORAGE AND USE IN THE REST OF THE PROGRAM.
* I NEED THIS FOR EACH CALculaTION
* --------------------------------------------------------------------------------------------------------------------------------------
*/
for(int k=0; k<2; k++)
{
try {
Input[k] = A_DesignDataBasisInvoer.BasisDataInv.getText(k,3);
} catch (BadLocationException e1) {
// Todo Auto-generated catch block
e1.printstacktrace();
}
A_BasisDataASME.setBasisDataInv(Input);
}
System.out.println(Input.length);
}
}
}
public class A_DesignDataBasisInvoer extends JPanel{
public String[][] ArrayDesignData;
public static JTextField BasisDataInv;
JButton SaveBasisDataBtn;
public A_DesignDataBasisInvoer(String calculationCodeVoorFrameTitel) {
SchermConstanten schermConstanten = new SchermConstanten();
int scherminstellingen[] = schermConstanten.getschermConstanten();
Font font = new Font("Arial",scherminstellingen[16]);
Font fontheading = new Font("Arial",scherminstellingen[16]*3/2);
/*--------------------------------------------------------------------------------------------------------------------------------------
* SETUP INPUT SCREEN JTEXTFIELDS
*---------------------------------------------------------------------------------------------------------------------------------------
*/
JPanel DataInvoerPaneel= new JPanel();
DataInvoerPaneel.setPreferredSize(new Dimension((scherminstellingen[12])/3*2,scherminstellingen[13]-20));
DataInvoerPaneel.setBackground(Color.decode("#D3D3D3"));
DataInvoerPaneel.setLayout(null);
DataInvoerPaneel.setopaque(true);
DataInvoerPaneel.setVisible(true);
add(DataInvoerPaneel);
String[][] DesignDataInput_ASMEB313_2020 = {
{"Design Pressure","Pd:","DesignPressurefield","Bar(g)"},{"Operating Pressure","Po:","OperatingPressurefield",{"Design Temperature","Td:","DesignTemperatureField","\u00B0"+"C"},{"Operating Temperature","To:","OperatingTemperatureField",{"Number of Cycles","N:","CycleField",""}};
if (calculationCodeVoorFrameTitel == "B31.3-2020"){
ArrayDesignData = DesignDataInput_ASMEB313_2020;
}
GridBagConstraints gc = new GridBagConstraints();
gc.gridx = 0;
gc.gridy = 0;
gc.weightx = 1;
gc.weighty = 0.01;
gc.fill = GridBagConstraints.NONE;
gc.anchor = GridBagConstraints.LINE_START;
/* Variabele FOR POSITIONING */
int VertPositieVar1 = 35;
int HorzPositieVar1 = 270;
int HorzPositieVar2 = 340;
int HorzPositieVar3 = 430;
int lengte = ArrayDesignData.length;
System.out.println(lengte);
/* MAKE JTEXTFIELDS */
JTextField[] BasisDataInv = new JTextField[ArrayDesignData.length];
for(int i=0; i<ArrayDesignData.length; i++)
{
int vert = i * 40;
BasisDataInv[i] = new JTextField();
BasisDataInv[i].setForeground(Color.BLACK);
BasisDataInv[i].setBackground( Color.decode("#D3D3D3") );
BasisDataInv[i].setFont(font);
BasisDataInv[i].setBounds(HorzPositieVar2,40+VertPositieVar1*i,80,30);
BasisDataInv[i].setBorder(new LineBorder(Color.BLUE));
BasisDataInv[i].setopaque(true);
BasisDataInv[i].setVisible(true);
DataInvoerPaneel.add(BasisDataInv[i]);
}
}
public A_DesignDataBasisInvoer() {
// Todo Auto-generated constructor stub
}
}
public class A_BasisDataASME {
private static Object[] basisDataInv;
public static void setBasisDataInv(Object[] input){
basisDataInv = input;
}
public static Object[] getBasisDataInv(){
return basisDataInv;
}
}
public SchermConstanten() {
Dimension schermGroote = Toolkit.getDefaultToolkit().getScreenSize();
frameBreedte = schermGroote.width/10*9; //scherminstelling[0]
frameHoogte = schermGroote.height/10*9; //scherminstelling[1]
framePositieBreedte = (schermGroote.width-frameBreedte)/2; //scherminstelling[2]
framePositieHoogte = 0; //scherminstelling[3]
sizetopToolbarBreedte = frameBreedte-20; //scherminstelling[4]
sizetopToolbarHoogte = frameHoogte/20; //scherminstelling[5]
sizeBottomregelHoogte = frameHoogte/30+5; //scherminstelling[6]
sizeBottomregelBreedte = frameBreedte-20; //scherminstelling[7]
sizeLeftToolbarBreedte = frameBreedte/25; //scherminstelling[8]
sizeLeftToolbarHoogte = frameHoogte-sizeBottomregelHoogte-sizetopToolbarHoogte-60 ; //scherminstelling[9]
sizeTabelBreedte = frameBreedte-sizeLeftToolbarBreedte; //scherminstelling[10]
sizeTabelHoogte = frameHoogte/5; //scherminstelling[11]
sizeLeftdatafieldBreedte = (frameBreedte-sizeLeftToolbarBreedte-40)/2; //scherminstelling[12]
sizeLeftdatafieldHoogte = (frameHoogte-sizeBottomregelHoogte-sizetopToolbarHoogte-60); //scherminstelling[13]
sizeGeneralAreaBreedte = ((frameBreedte-sizeLeftToolbarBreedte-40)/2); //scherminstelling[14]
sizeGeneralAreaHoogte = (frameHoogte-sizeBottomregelHoogte-sizetopToolbarHoogte-60); //scherminstelling[15]
//text grote instellen om het leesbaar te houden bij hoge resolutie
for (int schermresolutie = 1600;schermresolutie < schermGroote.width; schermresolutie=schermresolutie+500) {
fontGrote = fontGrote +3; //scherminstelling[16]
fontButtons = fontGrote +1; //scherminstelling[17]
tabelRowHoogte = tabelRowHoogte + 3; //scherminstelling[18]
}
scherminstellingen = new int[] {frameBreedte,frameHoogte,framePositieBreedte,framePositieHoogte,sizetopToolbarBreedte,sizetopToolbarHoogte,sizeBottomregelHoogte,sizeBottomregelBreedte,sizeLeftToolbarBreedte,sizeLeftToolbarHoogte,sizeTabelBreedte,sizeTabelHoogte,sizeLeftdatafieldBreedte,sizeLeftdatafieldHoogte,sizeGeneralAreaBreedte,sizeGeneralAreaHoogte,fontGrote,fontButtons,tabelRowHoogte};
}
public int[] getschermConstanten() {
return scherminstellingen;
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)