2013-09-18 5 views
0

Я пытаюсь сделать GridBagLayout, чтобы просто иметь метку поверх текстового поля на вершине TextView в вертикальном окне, но я получаю исключениеСоздание GridBag Layout

Exception in thread "main" java.lang.IllegalArgumentException: cannot add to layout: constraints must be a GridBagConstraint 
    at java.awt.GridBagLayout.addLayoutComponent(GridBagLayout.java:685) 
    at java.awt.Container.addImpl(Container.java:1072) 
    at java.awt.Container.add(Container.java:957) 
    at javax.swing.JFrame.addImpl(JFrame.java:540) 
    at java.awt.Container.add(Container.java:925) 
    at guiprojj.gui.main(gui.java:31) 

Может кто-нибудь помочь мне в устраняя это исключение, возможно, я не понимаю, как работает gridbaglayout, если да, если бы вы могли указать мне в правильном направлении, это было бы потрясающе. Оцените помощь.

package guiprojj; 

import java.awt.BorderLayout; 
import java.awt.Dimension; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.util.Map; 

import javax.swing.*; 

import com.eclipsesource.json.JsonObject; 
import com.google.gson.JsonParser; 
import com.json.parsers.JSONParser; 
import com.json.parsers.JsonParserFactory; 


public class gui { 
    public static void main(String[] args) 
    { 
     JFrame maingui = new JFrame("Gui"); 
     maingui.setLayout(new GridBagLayout()); 
     GridBagConstraints c = new GridBagConstraints(); 
     c.fill = GridBagConstraints.HORIZONTAL; 
     JButton enter = new JButton("Enter"); 
     final JTextArea movieinfo = new JTextArea(5,20); 
     final JTextField movietext = new JTextField(16); 
     c.gridx = 1; 
     c.gridy = 0; 
     maingui.add(movietext, maingui); 
     final JScrollPane scrolll = new JScrollPane(movieinfo); 
     final JLabel titlee = new JLabel("Enter movie name here:"); 
     maingui.setResizable(false); 
     maingui.setVisible(true); 
     movieinfo.setLineWrap(true); 
     movieinfo.setWrapStyleWord(true); 
     movieinfo.setEditable(false); 

     scrolll.getPreferredSize(); 
     //pangui.setPreferredSize(new Dimension(300, 150)); 
     //pangui.add(scrolll, BorderLayout.CENTER); 
     //movieinfo.add(scrolll); 
     maingui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     maingui.pack(); 
     enter.addActionListener(new ActionListener(){ 
      public void actionPerformed(ActionEvent e) 
      { 
       System.out.println(Test.getMovieInfo(movietext.getText())); 
       JsonParserFactory factory=JsonParserFactory.getInstance(); 
       JSONParser parser=factory.newJsonParser(); 
       Map jsonData=parser.parseJson(Test.getMovieInfo(movietext.getText())); 
       String Title = (String)jsonData.get("Title"); 
       String Year = (String)jsonData.get("Year"); 
       String Plot = (String)jsonData.get("Plot"); 
       movieinfo.setText("Title: "+Title+"\nYear: "+ Year +"\nPlot: "+Plot); 
      } 
      }); 

     } 
} 

ответ

2

Я думаю maingui.add(movietext, maingui); должен быть maingui.add(movietext, c);

Этот последний параметр должен быть объект Формуляром конкретных ограничений. Вы передаете ему родительский объект.

1
maingui.add(movietext, maingui); 

"maingui" НЕ GridBagConstraint. «c» - это «GridBagConstraint».

Я не знаю, будет ли правильная переменная использовать правильную переменную, но она должна избавиться от исключения. Прочтите учебник Swing на примере How to Use GridBagLayout. Не только вы найдете код, чтобы лучше структурировать вашу программу. Весь код GUI должен выполняться на EDT. Для получения дополнительной информации об этом читайте в разделе, посвященном Concurrency.

1

Это неправильно:

maingui.add(movietext, maingui); 

При добавлении в контейнер, добавьте компонент + свои ограничения. В вашем случае:

maingui.add(movietext, c); 
Смежные вопросы