Кнопки не добавляют в Jframe
Я не могу создать поле с этим кодом.
Я хочу загрузить файл и поле должно добавить массивы для определенного размера. Проблема в том, что кнопки не отображаются в рамке. У кого-нибудь есть идеи, почему их нет в gridLayout
? Я уже опробовал некоторые варианты, но он все еще не работает.
package Gui;
import java.awt.FileDialog;
import java.awt.FlowLayout;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.LayoutManager;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Feld extends JFrame implements ActionListener {
//Deklaration von Variablen
JMenuBar jMenuBar;
JMenu datei, filter, hilfe;
JMenuItem neu;
JMenuItem oeffnen;
JMenuItem speichern;
JMenuItem beenden;
int hoehe = 100;
int breite = 100;
JMenuItem invertieren;
JMenuItem Graustufen;
JMenuItem HorizontalSpiegeln;
JMenuItem VertikalSpiegeln;
JMenuItem ueberPixelart;
private GridLayout gridLayout;
//erstellen eines Fensters und einer Menüleiste
public void felderstellen() {
jMenuBar = new JMenuBar();
//Zuordnen meiner Variablen zum Fenster
datei = new JMenu("Datei");
filter = new JMenu("Filter");
hilfe = new JMenu("Hilfe");
neu = new JMenuItem("neu");
oeffnen = new JMenuItem("öffnen");
beenden = new JMenuItem("beenden");
speichern = new JMenuItem("Hilfe");
invertieren = new JMenuItem("invertieren");
Graustufen = new JMenuItem("Graustufen");
HorizontalSpiegeln = new JMenuItem("Horizontal spiegeln");
VertikalSpiegeln = new JMenuItem("Vertikal spiegeln");
ueberPixelart = new JMenuItem("über Pixel Art");
//Hinzufügen der Menüpunkte zu den Oberpunkten
datei.add(oeffnen);
datei.add(neu);
datei.add(speichern);
datei.add(beenden);
filter.add(invertieren);
filter.add(Graustufen);
filter.add(HorizontalSpiegeln);
filter.add(VertikalSpiegeln);
hilfe.add(ueberPixelart);
oeffnen.addActionListener(this);
jMenuBar.add(datei);
jMenuBar.add(filter);
jMenuBar.add(hilfe);
setJMenuBar(jMenuBar);
setVisible(true);
setSize(1000, 2000);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == oeffnen) {
dateieinladen();
}
if (e.getSource() == beenden) {
schließen();
}
if (e.getSource() == hilfe) {
hilfe();
return;
}
}
private void schließen() {
}
private void hilfe() {
}
private void dateieinladen() {
FileDialog fd = new FileDialog(this, "Choose a file", FileDialog.LOAD);
fd.setDirectory("C:\\");
fd.setFile("*.txt");
fd.setVisible(true);
String filename = fd.getDirectory() + fd.getFile();
if (filename == null)
System.out.println("You cancelled the choice");
else
System.out.println("You chose " + filename);
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader(filename));
String line;
reader.readLine();
String hoeheBreite = reader.readLine();
int länge = hoeheBreite.split(" ").length;
String[] laenge = hoeheBreite.split(" ");
this.hoehe = Integer.parseInt(laenge[0]);
this.breite = Integer.parseInt(laenge[1]);
System.out.println(hoehe);
System.out.println(breite);
erstelleFeld(hoehe, breite);
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
private void erstelleFeld(int hoehe, int breite) {
setLayout(new GridLayout(hoehe, breite));
JLabel[] aHoehe = new JLabel[hoehe];
JLabel[] aBreite = new JLabel[breite];
JButton[][] buttons = new javax.swing.JButton[hoehe][breite];
System.out.print(hoehe);
System.out.print(breite);
for (int i = 0; i < hoehe; i++) {
for (int j = 0; j < breite; j++) {
if (i == 0) {
aBreite[j] = new JLabel("");
add(aBreite[j]);
} else if (j == 0) {
aHoehe[i] = new JLabel("");
add(aHoehe[i]);
}
add(buttons[i][j]);
}
}
}
}
1 ответ
Насколько я понимаю, вы никогда не создаете JButton
вот так:
for(int y = 0; y < hoehe; y++){
for(int x = 0; x < breite; x++){
buttons[y][x] = new JButton();
}
}
После этого вы можете добавить JButton
с вашим JFrame
Как уже упоминалось в комментарии к вашему вопросу, было бы неплохо перевести комментарии на немецком языке, так как не все вас поймут.