【问题标题】:Buttons dont add to Jframe按钮不添加到 Jframe
【发布时间】:2018-01-25 20:21:45
【问题描述】:

我无法使用此代码创建字段。

我想加载一个文件,该字段应该添加特定大小的数组。问题是按钮未显示在框架中。 有谁知道为什么他们不在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]);
            }
        }
    }
}

【问题讨论】:

  • @MarcelGe 你不能指望有人会试图找出你的 200 行格式不正确的代码有什么问题。请在发布前阅读如何创建minimal reproducible example。通常这个站点使用英语,所以如果您正在寻求帮助,最好添加最少翻译 cmets。只是说...

标签: java jframe jbutton grid-layout


【解决方案1】:

据我所知,您永远不会像这样实例化JButtons:

   for(int y = 0; y < hoehe; y++){
        for(int x = 0; x < breite; x++){
            buttons[y][x] = new JButton();
        }
    }

完成此操作后,您可以将JButtons 添加到您的JFrame

正如在对您问题的评论中提到的,翻译德语 cmets 可能是个好主意,因为不是每个人都能理解您。

【讨论】:

    猜你喜欢
    • 2018-03-19
    • 2016-07-12
    • 1970-01-01
    • 1970-01-01
    • 2015-10-29
    • 1970-01-01
    • 2020-06-02
    • 2013-03-19
    • 1970-01-01
    相关资源
    最近更新 更多