所以我一直致力于完成基本布局的GUI。我有逻辑全部映射出来,但我遇到的问题是弄清楚如何将一个填充数组设置为一个公共变量,其中所有的String和int放在其中保持完整,并没有保持空白。我绝不是编程专家,所以如果答案非常明显,请耐心等待。我将发布我试图将填充数组放入公共变量的窗口。
公共数组'robbieArray'在main中运行soley来输出任何值,但过去我不能在框架中使用它。我想要一个解决方案,以便我可以在框架和我决定制作的其他类中访问它。
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;
import java.beans.*;
public class PlayerShow extends JFrame
{
public JFrame playerShowFrame;
public final int CLASSSIZE1 = 2;//subject to change
//PlayerInput player = new PlayerInput();
public PlayerInput [] robbieArray = new PlayerInput [CLASSSIZE1];
public void main(String[] args) throws IOException, FileNotFoundException
{
// PlayerInput player = new PlayerInput();
Scanner inputRobbieChamps = new Scanner (new FileReader("robbie_mccarthy_champs.txt"));
for (int x = 0; x<CLASSSIZE1;x++)
{
String champName = inputRobbieChamps.next();
String role = inputRobbieChamps.next();
int tier = inputRobbieChamps.nextInt();
robbieArray[x] = new PlayerInput (champName, role, tier);
System.out.println("The champ name is " + robbieArray[x].getChampName() + "with a role of " + robbieArray[x].getRole() + " and a tier value of " + robbieArray[x].getTier());
}
// PlayerInput [] robbieArray = new PlayerInput[CLASSSIZE1];
/* for (int x = 0; x<CLASSSIZE1; x++)
{
robbieArray [x] = new PlayerInput();
}
for (int x = 0; x<CLASSSIZE1; x++)
{
robbieArray[x].setChampName(inputRobbieChamps.next());
robbieArray[x].setRole(inputRobbieChamps.next());
robbieArray[x].setTier(inputRobbieChamps.nextInt());
}*/
inputRobbieChamps.close();
}
public PlayerShow ()
{
frame();
playerShowFrame.setVisible(false);
}
public void frame()
{
playerShowFrame = new JFrame();
playerShowFrame.setVisible(true);
//playerShowFrame.setSize(900,600);
playerShowFrame.setDefaultCloseOperation(EXIT_ON_CLOSE);
getPlayerShowFrame().setBounds(100, 300, 900, 600);
playerShowFrame.setLayout(new GridLayout(5,8));
JLabel titleL = new JLabel ("Robbie McCarthy's data:", SwingConstants.CENTER);
JLabel blank1L = new JLabel (" ", SwingConstants.CENTER);
JLabel blank2L = new JLabel (" ", SwingConstants.CENTER);
JLabel champNameL = new JLabel("Champion Name", SwingConstants.CENTER);
JLabel roleL = new JLabel ("Role", SwingConstants.CENTER);
JLabel tierL = new JLabel ("Tier", SwingConstants.CENTER);
JTextArea hugeTF = new JTextArea ();
hugeTF.setColumns(6);
hugeTF.setRows(3);
// for (int x = 0; x<CLASSSIZE1; x++)
// {
System.out.println(robbieArray[0].getRole()); // This is where I am checking to see if i get a filled public array
// }
hugeTF.setEditable(false);
playerShowFrame = getPlayerShowFrame();
playerShowFrame.add(titleL);
playerShowFrame.add(blank1L);
playerShowFrame.add(blank2L);
playerShowFrame.add(champNameL);
playerShowFrame.add(roleL);
playerShowFrame.add(tierL);
playerShowFrame.add(hugeTF);
}
public JFrame getPlayerShowFrame() {
return playerShowFrame;
}
public void setPlayerShowFrame(JFrame playerShowFrame) {
this.playerShowFrame = playerShowFrame;
}
}
答案 0 :(得分:2)
将数组作为私有静态..为了封装OOP,创建一个静态getter
private static PlayerInput [] robbieArray = new PlayerInput [CLASSSIZE1];
public static PlayerInput [] getRobbieArray(){
return robbieArray;
}
然后你可以通过PlayerShow.getRobbieArray()
访问它答案 1 :(得分:1)
一种可能性是将其声明为静态。
public static PlayerInput [] robbieArray = new PlayerInput [CLASSSIZE1];
然后您可以从任何位置PlayerShow.robbieArray
访问它。
假设您只想要一个PlayerShow
和robbieArray
的实例。
否则,您可以将它传递给任何需要在构造函数中作为参数访问它的类,或者通过setter方法。