我有一個家庭作業任務,提供一個GUI界面,並顯示十個團隊,每個團隊由一個按鈕代表。每個按鈕的左側都有一個單選按鈕,允許用戶選擇收音機,然後單擊另一個球隊按鈕將選定的球隊移動到該位置。選定的隊伍將會移動,其他隊伍會上下移動。如何在調用帶參數的構造函數時讓我的java程序不創建多個實例?
這不是問題。代碼是完整的,但是,我有一個問題。目前它可以正常工作,但每次點擊一個按鈕後,程序會對構造函數進行新的調用,然後再打開該程序的另一個實例,但數據會正確移位。
我正在尋找關於如何使這項工作的建議。我試圖讓它調用創建GUI的方法,但它不能正常工作並拋出一個令人討厭的異常。
我的代碼在下面,關注的區域是99行和100行.99行被註釋掉了。這是我嘗試,而不是第100行新的構造函數調用。
我希望這是有道理的,並提前感謝任何建議。
注:(我不是找人來完成我的功課我,我已經完成了從無到有這個代碼,我已經用盡了自己想出來的身影這件事謝謝!)
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
public class P03TopTenTeams extends JFrame {
private static final long serialVersionUID = 1L;
public static void main(String[] args) {
String[] teams = {"Texas", "Vanderbilt", "Florida", "Missouri","Arkansas", "Kentucky", "Alabama", "Tennessee", "Georgia","Louisiana"};
new P03TopTenTeams(teams);
}
private JPanel panel1;
private JPanel panel2;
private JButton[] btn = new JButton[10];
private JRadioButton[] rbtn = new JRadioButton[10];
private ButtonGroup bg1 = new ButtonGroup();
private ButtonGroup bg2 = new ButtonGroup();
public P03TopTenTeams(String[] teams) {
buildWindow(teams);
}
private void buildWindow(String[] teams) {
int index;
this.setSize(300, 500);
this.setLocationRelativeTo(null);
this.setTitle("Top Ten Teams");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLayout(new BorderLayout());
panel1 = new JPanel();
panel1.setLayout(new GridLayout(10, 1));
for (index = 0; index < 10; index++) {
rbtn[index] = new javax.swing.JRadioButton(
Integer.toString(index + 1));
bg1.add(rbtn[index]);
panel1.add(rbtn[index]);
}
panel2 = new JPanel();
panel2.setLayout(new GridLayout(10, 1));
BtnHdlr btnhdlr = new BtnHdlr();
for (index = 0; index < 10; index++) {
btn[index] = new javax.swing.JButton(teams[index]);
bg2.add(btn[index]);
panel2.add(btn[index]);
btn[index].addActionListener(btnhdlr);
}
this.add(panel1, BorderLayout.WEST);
this.add(panel2, BorderLayout.CENTER);
this.setVisible(true);
}
private class BtnHdlr implements ActionListener {
public void actionPerformed(ActionEvent event) {
int from = 0;
int to = 0;
String[] teams = new String[10];
int index;
for (index = 0; index < bg1.getButtonCount(); index++) {
teams[index] = btn[index].getText();
if (rbtn[index].isSelected() == true) {
from = index;
}
if (btn[index].getText().equals(event.getActionCommand())) {
to = index;
}
}
updateTeamsArray(teams, from, to);
}
}
private void updateTeamsArray(String[] teams, int from, int to) {
int index;
String valueFrom = teams[from];
if (from < to) {
for (index = from; index < to; index++) {
teams[index] = teams[index + 1];
}
teams[to] = valueFrom;
} else {
for (index = from; index > to; index--) {
teams[index] = teams[index - 1];
}
teams[to] = valueFrom;
}
//buildWindow(teams);
new P03TopTenTeams(teams);
}
}
你要一次創建實例,如果你需要事後返回同一個實例? – Prateek
每次點擊按鈕後,我希望面板刷新,按鈕重新排列爲陣列的新順序。 – billabrian6