无法添加到布局约束必须是gridbagconstraint

时间:2016-11-10 12:18:59

标签: java swing layout-manager gridbaglayout border-layout

我需要使用GridBagLayout,但我得到以下错误。你能帮忙吗?

  

java.lang.IllegalArgumentException:无法添加到layout:constraints   必须是GridBagConstraint   java.awt.GridBagLayout.addLayoutComponent(未知来源)at   java.awt.Container.addImpl(未知来源)at   java.awt.Container.add(未知来源)at   havuzAracıFormu。(havuzAracıFormu.java:221)at   havuzAracıFormu$ 1.run(havuzAracıFormu.java:47)at at   java.awt.event.InvocationEvent.dispatch(未知来源)at   java.awt.EventQueue.dispatchEventImpl(未知来源)at   java.awt.EventQueue.access $ 500(未知来源)at   java.awt.EventQueue $ 3.run(未知来源)at   java.awt.EventQueue $ 3.run(未知来源)at   java.security.AccessController.doPrivileged(Native Method)at   java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege(未知   来自)java.awt.EventQueue.dispatchEvent(未知来源)at   java.awt.EventDispatchThread.pumpOneEventForFilters(未知来源)     at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)     在java.awt.EventDispatchThread.pumpEventsForHierarchy(未知   来自java.awt.EventDispatchThread.pumpEvents(未知来源)     at java.awt.EventDispatchThread.pumpEvents(Unknown Source)at   java.awt.EventDispatchThread.run(未知来源)

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

import org.jdatepicker.impl.JDatePanelImpl;
import org.jdatepicker.impl.JDatePickerImpl;
import org.jdatepicker.impl.UtilDateModel;

import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JFormattedTextField.AbstractFormatter;

import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Properties;
import java.awt.event.ActionEvent;

public class havuzAracıFormu extends JFrame {

    private JPanel contentPane;
    private JTextField textFieldAdSoyad;
    private JTextField textFieldGorev;
    private JTextField textFieldDepartman;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    havuzAracıFormu frame = new havuzAracıFormu();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     * @throws ClassNotFoundException 
     * @throws SQLException 
     */
    public havuzAracıFormu() throws ClassNotFoundException, SQLException {

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 728, 992);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        contentPane.setLayout(new GridBagLayout());
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.gridx = 0;
        gbc.gridy = 0;
        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.anchor = GridBagConstraints.CENTER;

        setContentPane(contentPane);

        JLabel lblKullancBilgileri = new JLabel("Kullan\u0131c\u0131 Bilgileri");
        Font font = lblKullancBilgileri.getFont();
        lblKullancBilgileri.setFont(new Font(font.getFontName(), Font.BOLD, 14));
        contentPane.add(lblKullancBilgileri);       

        JLabel lblAdSoyad = new JLabel("Ad\u0131 Soyad\u0131");
        JLabel lblGorevi = new JLabel("Görevi");
        JLabel lblDepartmani = new JLabel("Departman\u0131");
        contentPane.add(lblAdSoyad,gbc);

        textFieldAdSoyad = new JTextField();
        contentPane.add(textFieldAdSoyad, gbc);
        textFieldAdSoyad.setColumns(10);

        contentPane.add(lblGorevi);

        textFieldGorev = new JTextField();
        contentPane.add(textFieldGorev, gbc);
        textFieldGorev.setColumns(5);

        contentPane.add(lblDepartmani, gbc);

        textFieldDepartman = new JTextField();
        contentPane.add(textFieldDepartman);
        textFieldDepartman.setColumns(10);


        JLabel lblAracBilgileri = new JLabel("Araç Bilgileri");
        Font font2 = lblAracBilgileri.getFont();
        lblAracBilgileri.setFont(new Font(font2.getFontName(), Font.BOLD, 14));
        contentPane.add(lblAracBilgileri, gbc);

        JLabel lblMarka = new JLabel("Marka");
        contentPane.add(lblMarka, gbc);
        JTextField textFieldMarka = new JTextField(5);
        contentPane.add(textFieldMarka,gbc);
        textFieldMarka.setColumns(5);

        JLabel lblModel = new JLabel("Model");
        contentPane.add(lblModel,gbc);
        JTextField textFieldModel = new JTextField();
        contentPane.add(textFieldModel,gbc);
        textFieldModel.setColumns(5);

        JLabel lblPlakaNo = new JLabel("PlakaNo");
        contentPane.add(lblPlakaNo,gbc);
        JTextField textFieldPlakaNo = new JTextField();
        contentPane.add(textFieldPlakaNo,gbc);
        textFieldPlakaNo.setColumns(5);

        JLabel lblCikisTarihiveSaati = new JLabel("Çıkış Tarihi ve Saati");
        contentPane.add(lblCikisTarihiveSaati,gbc);
        JTextField textFieldCikis = new JTextField();
//      contentPane.add(textFieldCikis);
        UtilDateModel model = new UtilDateModel();
        Properties p = new Properties();
        p.put("text.today", "Today");
        p.put("text.month", "Month");
        p.put("text.year", "Year");
        JDatePanelImpl datePanel = new JDatePanelImpl(model, p);
        JDatePickerImpl datePicker = new JDatePickerImpl(datePanel, new DateLabelFormatter());
        contentPane.add(datePicker,gbc);

        textFieldCikis.setColumns(5);

        JLabel lblCikisKm = new JLabel("Çıkış Km");
        contentPane.add(lblCikisKm,gbc);
        JTextField textFieldCikisKm = new JTextField();
        contentPane.add(textFieldCikisKm,gbc);
        textFieldCikisKm.setColumns(5);

        JLabel lblDonusTarihiveSaati = new JLabel("Dönüş Tarihi ve Saati");
        contentPane.add(lblDonusTarihiveSaati,gbc);
        JTextField textFieldDonus = new JTextField();
        UtilDateModel model2 = new UtilDateModel();
        Properties p2 = new Properties();
        p2.put("text.today", "Today");
        p2.put("text.month", "Month");
        p2.put("text.year", "Year");
        JDatePanelImpl datePanel2 = new JDatePanelImpl(model2, p);

        JDatePickerImpl datePicker2 = new JDatePickerImpl(datePanel2, new DateLabelFormatter());
        contentPane.add(datePicker2,gbc);
        textFieldDonus.setColumns(5);

        JLabel lblDonusKm = new JLabel("Dönüş Km");
        contentPane.add(lblDonusKm,gbc);
        JTextField textFieldDonusKm = new JTextField();
        contentPane.add(textFieldDonusKm,gbc);
        textFieldDonusKm.setColumns(5);

        JLabel lblNeden = new JLabel("Aracın Kullanılacağı Yer-Kullanım Neden Geçici Araç");
        contentPane.add(lblNeden,gbc);
        JTextField textFieldNeden = new JTextField();
        contentPane.add(textFieldNeden,gbc);
        textFieldNeden.setColumns(5);

        JLabel lblKullanimSuresi = new JLabel("Kullanım Süresi");
        contentPane.add(lblKullanimSuresi,gbc);
        JTextField textFieldSure = new JTextField();
        contentPane.add(textFieldSure,gbc);
        textFieldSure.setColumns(5);

        JLabel lblHasarveEksiklikler = new JLabel("Hasar ve Eksiklikler");
        contentPane.add(lblHasarveEksiklikler,gbc);

        JLabel lblAractaGorulenHasarlar = new JLabel("Araçta Görülen Hasarlar veya Eksiklikler (Zincir, İstetme, İlk Yardım Çantası vs.");
        contentPane.add(lblAractaGorulenHasarlar,gbc);

        JTextField textFieldHasar = new JTextField();
        contentPane.add(textFieldHasar,gbc);
        textFieldHasar.setColumns(5);

        JButton btnNewButton = new JButton("Gönder");
        btnNewButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                String url = "jdbc:sqlserver://WIN-J53H5BK2ANC;databaseName=test;integratedSecurity=true;";
                try {
                    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

                Connection conn = DriverManager.getConnection(url);
                Statement st = conn.createStatement();
                String queryString = "insert into havuzAracıFormu values ('" + textFieldAdSoyad.getText() + "'," + 
                                                                          "'" + textFieldGorev.getText() + "'," +
                                                                          "'" + textFieldDepartman.getText() + "'," +
                                                                          "'" + textFieldMarka.getText() + "'," +
                                                                          "'" + textFieldModel.getText() + "'," +
                                                                          "'" + textFieldPlakaNo.getText() + "'," +
                                                                          "'" + datePicker.getJFormattedTextField().getText() + "'," +
                                                                          "'" + textFieldCikisKm.getText() + "'," +
                                                                          "'" + datePicker2.getJFormattedTextField().getText()+ "'," +
                                                                          "'" + textFieldDonusKm.getText() + "'," +
                                                                          "'" + textFieldNeden.getText() + "'," +
                                                                          "'" + textFieldSure.getText() + "'," +
                                                                          "'" + textFieldHasar.getText() + "')";
                st.executeUpdate(queryString);
                } catch (ClassNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        });
        contentPane.add(btnNewButton, BorderLayout.SOUTH);
    }

}

class DateLabelFormatter extends AbstractFormatter{

    private String datePattern = "yyyy-MM-dd";
    private SimpleDateFormat dateFormatter = new SimpleDateFormat(datePattern);

    @Override
    public Object stringToValue(String text) throws ParseException {

        return dateFormatter.parseObject(text);
    }

    @Override
    public String valueToString(Object value) throws ParseException {
        if(value != null){
            Calendar cal = (Calendar) value;
            return dateFormatter.format(cal.getTime());
        }
        return "";
    }

}

1 个答案:

答案 0 :(得分:1)

一旦该代码形成一个更简单的形式,将编译没有所有cruft,堆栈跟踪的第一行与自定义(即您的)代码相关:

contentPane.add(btnNewButton, BorderLayout.SOUTH);

BorderLayout.SOUTH是一个用于BorderLayout的约束,但在我们看到的代码中较早..

contentPane.setLayout(new GridBagLayout()); // I.E. **NOT** a BorderLayout

一般建议

  • 请参阅What is a stack trace, and how can I use it to debug my application errors?作为程序员,我们将在整个职业生涯中看到很多的例外情况,我们需要学习如何解决它们,或者至少解决其中的大部分问题。只有当你知道如何解决大多数异常,但不确定为什么特定的异常发生在特定的代码行中时,你应该在SO上询问。
  • 正如几位评论中提到的那样,如果有疑问, 将代码 简化为错误显示的位置,但删除了所有不相关的代码。
  • 我调查这个的唯一原因是因为我特别无聊而无法入睡。我通常只是投票关闭并继续处理下一个问题,即该人可以设法创建MCVE。所以..不要依赖有人在将来对你表示同情。