java - 无法编译的源代码 java.awt.Container.add

标签 java swing jpanel layout-manager

好吧,我的 GUI 遇到了问题。在做完全相同的事情时,我遇到了以前从未遇到过的错误。我什至使用旧代码。而且我正在考试,所以我不明白问题,所以压力更大。

主要:http://pastebin.com/Py9S6nd3

import javax.swing.JFrame;

public class Jonth_SwingTenta {

    private static void createAndShowGui() {
        //Skapar ett fönster där gui komponenter läggs.
        JFrame frame = new JFrame("ToDo");
        //Anger vad som ska hända om fönstret stängs, i detta fall avslutas fönstret när man trycker på X.
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //Skapar ett objekt av klassen FormularPanel (privat lyssnarklass)
        //GridBagPanel panel = new GridBagPanel(); 
        PanelGUI panel = new PanelGUI();
//        frame.setJMenuBar(panel2.getMenu());
        //Lägger på panelen på frame.
        frame.getContentPane().add(panel);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGui();
            }
        });
    }
}

图形用户界面:http://pastebin.com/TYFG1XdU

import java.awt.*;
import javax.swing.*;
import javax.xml.bind.Marshaller.Listener;

/**
 *
 * @author h12mjont
 */
public class PanelGUI extends JPanel {

    private JPanel panel;
    private GridBagConstraints c;
    private GridBagLayout gridBag;
    private JLabel variID, varuNamn, varuKat;
    private JTextField textField1, textField2;
    private JTextArea textArea1;
    private JButton laggTill, taBort, uppdatera, sokPaID, sokKat;
    private Listener listener;
    private DAOFactory daofactory;
    private DAOInterface dao;
    private JComboBox markeBox;
    String[] marken = {"Frukt", "Mejeri", "Kött"};

    public PanelGUI() {

        panel = new JPanel(); //Skapar en ny panel där alla komponeneter ska finnas.
        gridBag = new GridBagLayout(); //Skapar en gridbaglayout
        c = new GridBagConstraints(); //Skapar constraints.
        panel.setLayout(gridBag); //Sätter layouten.
        //----------------col 1-----------------------------------
        variID = new JLabel("Varu ID");
        laggTillGUIGridBag(variID, 0, 0, 1, 1);
        varuNamn = new JLabel("Varunamn");
        laggTillGUIGridBag(varuNamn, 1, 0, 1, 1);
        varuKat = new JLabel("Varukategori");
        laggTillGUIGridBag(varuKat, 2, 0, 1, 1);
        laggTill = new JButton("Lägg till");
        laggTillGUIGridBag(laggTill, 3, 0, 1, 1);
        uppdatera = new JButton("Uppdatera");
        laggTillGUIGridBag(uppdatera, 4, 0, 1, 1);
        sokKat = new JButton("Sök på Kategori");
        laggTillGUIGridBag(sokKat, 5, 0, 2, 1);
        //-----------------col 2--------------------------------
        textField1 = new JTextField();
        textField1.setPreferredSize(new Dimension(70, 20));
        laggTillGUIGridBag(textField1, 0, 1, 2, 1);
        textField2 = new JTextField();
        textField2.setPreferredSize(new Dimension(70, 20));
        laggTillGUIGridBag(textField2, 1, 1, 2, 1);
        markeBox = new JComboBox();
        markeBox.setModel(new DefaultComboBoxModel(marken));
        // markeBox.addItemListener(combolyssnare);
        markeBox.setPreferredSize(new Dimension(70, 20));
        laggTillGUIGridBag(markeBox, 2, 1, 1, 1);
        taBort = new JButton("Ta bort");
        laggTillGUIGridBag(taBort, 3, 1, 1, 1);
        sokPaID = new JButton("Sök på id");
        laggTillGUIGridBag(sokPaID, 4, 1, 1, 1);
        //-------------------col 3--------------------------------
        textArea1 = new JTextArea();
        textArea1.setPreferredSize(new Dimension(350, 100));
        textArea1.setMinimumSize(new Dimension(350, 100));
        laggTillGUIGridBag(textArea1, 0, 3, 2, 2);
        //----------------Slut på GUI ----------------------------
        add(panel);
    }

    private void laggTillGUIGridBag(Component guiKomponent, int rad, int kolumn, int bredd, int hojd) {
        c.fill = GridBagConstraints.BOTH; //Gör så komponenten fyller ut sig i storlek åt båda håll.
        c.gridx = kolumn;
        c.gridy = rad;
        c.gridwidth = bredd;
        c.gridheight = hojd;
        c.insets = new Insets(5, 5, 5, 5); //Sätter padding runt komponenten
        gridBag.setConstraints(guiKomponent, c);
        panel.add(guiKomponent, c);
    }
}

我不明白问题出在哪里。抱歉,虽然它是瑞典语的,但你仍然可以理解我用它做什么。

感谢您提供的任何帮助!

最佳答案

没有所有 setPreferredSize() 调用看起来不错,应该是 avoided .

image

import java.awt.Component;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.xml.bind.Marshaller.Listener;

public class Jonth_SwingTenta {

    private static void createAndShowGui() {
        JFrame frame = new JFrame("ToDo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        PanelGUI panel = new PanelGUI();
        frame.add(panel);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                createAndShowGui();
            }
        });
    }

    private static class PanelGUI extends JPanel {

        private JPanel panel;
        private GridBagConstraints c;
        private GridBagLayout gridBag;
        private JLabel variID, varuNamn, varuKat;
        private JTextField textField1, textField2;
        private JTextArea textArea1;
        private JButton laggTill, taBort, uppdatera, sokPaID, sokKat;
        private Listener listener;
        private JComboBox markeBox;
        String[] marken = {"Frukt", "Mejeri", "Kött"};

        public PanelGUI() {

            panel = new JPanel();
            gridBag = new GridBagLayout();
            c = new GridBagConstraints();
            panel.setLayout(gridBag);
            //----------------col 1-----------------------------------
            variID = new JLabel("Varu ID");
            laggTillGUIGridBag(variID, 0, 0, 1, 1);
            varuNamn = new JLabel("Varunamn");
            laggTillGUIGridBag(varuNamn, 1, 0, 1, 1);
            varuKat = new JLabel("Varukategori");
            laggTillGUIGridBag(varuKat, 2, 0, 1, 1);
            laggTill = new JButton("Lägg till");
            laggTillGUIGridBag(laggTill, 3, 0, 1, 1);
            uppdatera = new JButton("Uppdatera");
            laggTillGUIGridBag(uppdatera, 4, 0, 1, 1);
            sokKat = new JButton("Sök på Kategori");
            laggTillGUIGridBag(sokKat, 5, 0, 2, 1);
            //-----------------col 2--------------------------------
            textField1 = new JTextField();
            laggTillGUIGridBag(textField1, 0, 1, 2, 1);
            textField2 = new JTextField();
            laggTillGUIGridBag(textField2, 1, 1, 2, 1);
            markeBox = new JComboBox();
            markeBox.setModel(new DefaultComboBoxModel(marken));
            // markeBox.addItemListener(combolyssnare);
            laggTillGUIGridBag(markeBox, 2, 1, 1, 1);
            taBort = new JButton("Ta bort");
            laggTillGUIGridBag(taBort, 3, 1, 1, 1);
            sokPaID = new JButton("Sök på id");
            laggTillGUIGridBag(sokPaID, 4, 1, 1, 1);
            //-------------------col 3--------------------------------
            textArea1 = new JTextArea();
            laggTillGUIGridBag(textArea1, 0, 3, 2, 2);
            //----------------Slut på GUI ----------------------------
            add(panel);
        }

        private void laggTillGUIGridBag(Component guiKomponent,
                int rad, int kolumn, int bredd, int hojd) {
            c.fill = GridBagConstraints.BOTH;
            c.gridx = kolumn;
            c.gridy = rad;
            c.gridwidth = bredd;
            c.gridheight = hojd;
            c.insets = new Insets(5, 5, 5, 5);
            gridBag.setConstraints(guiKomponent, c);
            panel.add(guiKomponent, c);
        }
    }
}

关于java - 无法编译的源代码 java.awt.Container.add,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15985998/

相关文章:

java - JFreeChart 数据集不适用于 JPanel

java - eclipse:如何让 "link with editor"在窗口之间工作?

java - 在这种情况下,jvm 如何解析对重载方法的调用?

java - 带有破折号/连字符的模式名称 i HyperSQL

java - 如何在匿名类监听器中添加MouseEvent?

java - 如何使用 GridBagConstraints 正确对齐和定位

Java Swing - 如何在任何 JOptionPane 之前发出蜂鸣声?

java - JPanel图像从屏幕飞走

java - 如何从 JFrame 将数据输出到 JPanel

java - 如何在清理文档时删除空文本元素?