Ich versuche, eine Einheit Konvertierungsprogramm mit Jbuttons in einem jpanel machen. Wenn ich jedoch das Programm starte, erscheint das erste Fenster, ich wähle "Länge". Nun, es zeigt 8 Tasten auf jeder Seite, nach der Auswahl einer davon, die Hälfte der Tasten funktioniert nicht mehr, nur die rechte Spalte jeder Seite funktioniert.Java-Hälfte der JButtons aufhören zu arbeiten in JPanel
public class Gui extends JFrame {
private JButton Subject[] = new JButton[8];
private String SubjNames[] = {"Length", "Mass", "Currency", "Temperature", "Time", "Speed", "Data", "Cooking"};
private JButton Length1[] = new JButton[8];
private JButton Length2[] = new JButton[8];
private String LengNames[] = {"inches", "feet", "yards", "miles", "millimeters", "centimeters", "meters", "kilometers"};
private JTextField convertedFrom;
private JTextField amountFrom;
private JTextField convertedTo;
private JTextField amountTo;
private String from;
private String CTo;
private String ATo;
private int SubjectLocX = 40;
private int SubjectLocY = 50;
private int Length1LocX = 40;
private int Length1LocY = 150;
private int Length2LocX = 330;
private int Length2LocY = 150;
private int t = 0;
public Gui(){
super("Converter");
setLayout(null);
System.out.println("yes");
for (int i = 0; i<8; i++) {
Subject[i] = new JButton(SubjNames[i]);
Subject[i].setLocation(SubjectLocX,SubjectLocY);
Subject[i].setSize(200,50);
add(Subject[i]);
if (i < 3) {
SubjectLocX = 40;
SubjectLocY += 100;
} else if (i == 3) {
SubjectLocX = 330;
SubjectLocY = 50;
} else if (i > 3) {
SubjectLocY += 100;
}
}
HandlerClass handler = new HandlerClass();
for (int i = 0; i<8; i++) {
Subject[i].addActionListener(handler);
}
for (int i = 0; i<8; i++) {
Length1[i] = new JButton(SubjNames[i]);
Length2[i] = new JButton(SubjNames[i]);
}
for (int i = 0; i<8; i++) {
Length1[i].addActionListener(handler);
Length2[i].addActionListener(handler);
}
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(600,500);
setLocation(400,200);
setVisible(true);
}
public void Step2() {
for (int i = 0; i<8; i++) {
remove(Subject[i]);
}
for (int i = 0; i<8; i++) {
remove(Length1[i]);
remove(Length2[i]);
}
HandlerClass handler = new HandlerClass();
convertedFrom = new JTextField(from, 20);
convertedFrom.setEditable(false);
convertedFrom.setLocation(40,50);
convertedFrom.setSize(200,30);
add(convertedFrom);
convertedTo = new JTextField(CTo, 20);
convertedTo.setEditable(false);
convertedTo.setLocation(330,50);
convertedTo.setSize(200,30);
add(convertedTo);
amountFrom = new JTextField("amount", 20);
amountFrom.setLocation(40,100);
amountFrom.setSize(200,30);
add(amountFrom);
amountTo = new JTextField(ATo, 20);
amountTo.setEditable(false);
amountTo.setLocation(330,100);
amountTo.setSize(200,30);
add(amountTo);
for (int i = 0; i<8; i++) {
Length1[i].setLocation(Length1LocX, Length1LocY);
Length1[i].setSize(90, 50);
add(Length1[i]);
if (i < 3) {
Length1LocX = 40;
Length1LocY += 100;
} else if (i == 3) {
Length1LocX = 150;
Length1LocY = 150;
} else if (i > 3) {
Length1LocY += 100;
}
Length2[i].setLocation(Length2LocX, Length2LocY);
Length2[i].setSize(90, 50);
add(Length2[i]);
if (i < 3) {
Length2LocX = 330;
Length2LocY += 100;
} else if (i == 3) {
Length2LocX = 440;
Length2LocY = 150;
} else if (i > 3) {
Length2LocY += 100;
}
}
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(600,600);
setLocation(400,200);
setVisible(true);
}
private class HandlerClass implements ActionListener {
public void actionPerformed(ActionEvent event) {
for (int i = 0; i<8; i++) {
if (event.getSource() == Length1[i]) {
from = event.getActionCommand();
}
if (event.getSource() == Length2[i]) {
CTo = event.getActionCommand();
}
}
Step2();
}
}
}`
(Hinweis: Ich habe keine Importe oder Hauptmethode in Code oben, aber ist in Echtprogramm). Der Konstruktor erstellt die JButtons und Aktionslistener. Bei der Methode step2() werden die Schaltflächengröße, der Speicherort und das Fenster erstellt und neu erstellt. (Length1 und Length2 JButtons sind was hier vermasselt). Ich weiß nicht, warum die Hälfte der Knöpfe nach dem zweiten Mal nicht mehr funktioniert.
Vermeiden Sie 'null' Layouts, pixelgenaue Layouts sind eine Illusion in modernem Design. Es gibt zu viele Faktoren, die die individuelle Größe von Komponenten beeinflussen, von denen Sie keine kontrollieren können. Swing wurde entwickelt, um mit Layout-Managern im Kern zu arbeiten, das Verwerfen dieser führt zu keinem Ende der Probleme und Probleme, die Sie mehr und mehr Zeit verbringen werden, versuchen zu beheben – MadProgrammer