2016-03-24 31 views
0

GUI kodum üzerinde çalışıyorum, böylece sınıfta vermiş olduğum örnekler için sadece birkaç farklı arayüz oluşturdum.GUI'deki tüm bu hatalara neden sebep oluyor?

Burada bir GUI oluşturmaya çalışıyorum, üst kısımda Etiketler vardır, ardından kullanıcının kendi metin alanları takip eder, diğeri üst üste gelir. Daha sonra bunu bir dizi iki düğme ve nihayet düzenlenemeyen bir sonuç alanı (daha sonra sonuçlar için bazı alanları tanıtacağı gibi) ve opak olmasını istiyorum. Bütün bir dizi hata alıyorum, sadece aptalca bir şey yapıp yapmadığımı merak ediyorum.

panel için kod buradadır: önceden

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.BorderFactory; 
import javax.swing.Box; 
import javax.swing.BoxLayout; 
import javax.swing.JButton; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 

public class GradePanel extends JPanel { 

private JButton addEntry, calculate; 
private JLabel name, grade; 
private JTextField nameField, gradeField, resultField; 

public GradePanel() { 

    // Button to add entry to list 
    addEntry = new JButton("Add entry to list"); 
    // addEntry.addActionListener(new tempListener()); 

    // Button to print all entries in correct format 
    calculate = new JButton("Print all user grades"); 
    // calculate.addActionListener(new tempListener()); 

    //Create Labels 
    name = new JLabel("Enter student name: "); 
    nameField = new JTextField(10); 
    // nameField.addActionListener(new tempListener()); 

    grade = new JLabel("Enter students mark: "); 
    gradeField = new JTextField(5); 
    // gradeField.addActionListener(new tempListener()); 

    //Bottom segment for result 
    resultField = new JTextField(); 
    resultField.setOpaque(false); 
    resultField.setEditable(false); 

    setLayout(new BorderLayout()); 

    //Bottom Panel 
    JPanel GradePanel = new JPanel(); 
    GradePanel.setBorder(BorderFactory.createTitledBorder("Students/Results")); 
    GradePanel.setOpaque(false); 
    GradePanel.add(resultField); 

    //Button Panel 
    JPanel ButtonPane = new JPanel(); 
    ButtonPane.add(addEntry, BoxLayout.LINE_AXIS); 
    ButtonPane.add(calculate, BoxLayout.LINE_AXIS); 

    //Label Panel 
    JPanel labelPane = new JPanel(); 
    labelPane.add(name); 
    labelPane.add(Box.createRigidArea(new Dimension (5,0))); 
    labelPane.add(nameField); 
    labelPane.add(Box.createRigidArea(new Dimension (0,2))); 
    labelPane.add(grade); 
    labelPane.add(Box.createRigidArea(new Dimension (5,0))); 
    labelPane.add(gradeField); 

    //Add all panels to the main panel 
    add(labelPane, BorderLayout.NORTH); 
    add(ButtonPane, BorderLayout.CENTER); 
    add(GradePanel, BorderLayout.SOUTH); 

    setBackground(Color.WHITE); 
    setPreferredSize(new Dimension(400, 300)); 
} 

teşekkürler!

DÜZENLEME: 2

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: illegal component position 
    at java.awt.Container.addImpl(Container.java:1087) 
    at java.awt.Container.add(Container.java:467) 
    at GradePanel.<init>(GradePanel.java:55) 
    at Grade$1.run(Grade.java:26) 
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756) 
    at java.awt.EventQueue.access$500(EventQueue.java:97) 
    at java.awt.EventQueue$3.run(EventQueue.java:709) 
    at java.awt.EventQueue$3.run(EventQueue.java:703) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:726) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) 

EDIT:

public class GradePanel2 extends JPanel { 

    private JButton addEntry, calculate; 
    private JLabel name, grade; 
    private JTextField nameField, gradeField, resultField; 

    public GradePanel2() { 

     // Button to add entry to list 
     addEntry = new JButton("Add entry to list"); 
     // addEntry.addActionListener(new tempListener()); 

     // Button to print all entries in correct format 
     calculate = new JButton("Print all user grades"); 
     // calculate.addActionListener(new tempListener()); 

     // Create Labels 
     name = new JLabel("Enter student name: "); 
     nameField = new JTextField(10); 
     // nameField.addActionListener(new tempListener()); 

     grade = new JLabel("Enter students mark: "); 
     gradeField = new JTextField(5); 
     // gradeField.addActionListener(new tempListener()); 

     // Bottom segment for result 
     resultField = new JTextField(); 
     resultField.setOpaque(false); 
     resultField.setEditable(false); 

     setLayout(new BorderLayout()); 

     // Bottom Panel 
     JPanel GradePanel = new JPanel(); 
     GradePanel.setBorder(BorderFactory.createTitledBorder("Students/Results")); 
     GradePanel.setOpaque(false); 
     GradePanel.add(resultField); 

     // Button Panel 
     JPanel ButtonPane = new JPanel(); 
     ButtonPane.setLayout(new BoxLayout(ButtonPane, BoxLayout.PAGE_AXIS)); 
     ButtonPane.add(addEntry, BoxLayout.LINE_AXIS); 
     ButtonPane.add(calculate, BoxLayout.LINE_AXIS); 

     // Label Panel 
     JPanel labelPane = new JPanel(); 
     labelPane.setLayout(new BoxLayout(labelPane, BoxLayout.PAGE_AXIS)); 
     labelPane.add(name); 
     labelPane.add(Box.createRigidArea(new Dimension(5, 0))); 
     labelPane.add(nameField); 
     labelPane.add(Box.createRigidArea(new Dimension(0, 2))); 
     labelPane.add(grade); 
     labelPane.add(Box.createRigidArea(new Dimension(5, 0))); 
     labelPane.add(gradeField); 

     // Add all panels to the main panel 
     add(labelPane, BorderLayout.NORTH); 
     add(ButtonPane, BorderLayout.CENTER); 
     add(GradePanel, BorderLayout.SOUTH); 

     setBackground(Color.WHITE); 
     setPreferredSize(new Dimension(400, 300)); 
    } 

} 
+3

Ve olacağını görüyoruz hatalar ... bir göz haiving başlamalısınız? – KevinO

+1

'setPreferredSize (yeni Boyut (400, 300));' kötü bir fikir – MadProgrammer

+1

'ButtonPane' bir' FlowLayout' kullanıyor, ancak 'BoxLayout' kısıtlamalarını uygulamaya geçirerek API’nın bunu yapmasını engelliyor. var olmayan bir yerde bir bileşen eklemeye çalıştığınızı düşünün. Bu, "iş parçacığında istisna" AWT-EventQueue-0 "java.lang.IllegalArgumentException: illegal bileşen konumu" * exception – MadProgrammer

cevap

1

Bir FlowLayout varsayılan olarak kullandığı hangi bir JPanel için BoxLayout kısıtlamaları uyguluyorsanız ...

JPanel ButtonPane = new JPanel(); 
ButtonPane.add(addEntry, BoxLayout.LINE_AXIS); 
ButtonPane.add(calculate, BoxLayout.LINE_AXIS); 
hataları unuttum

hangi

neden oluyor
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: illegal component position 
    at java.awt.Container.addImpl(Container.java:1085) 
    at java.awt.Container.add(Container.java:465) 
    at javaapplication866.JavaApplication866$GradePanel.<init>(JavaApplication866.java:98) 

Belki How to Use BoxLayout

+0

Halen bazı değişiklikler yaptıktan sonra bir hatayla karşılaşıyorsunuz, şu anda neden herhangi bir fikir var? – SkyPlus

+0

Geri gelip GridBagLayout ile yarın denemeye başlayacağım ve baştan başlayacağım ama hatalarımı öğrenmek için bunu denemeliyim. Yardım için teşekkürler – SkyPlus

İlgili konular