Hallo,
ich versuche mich gerade die GUI-Programmierung zu verstehen. Zur GUI-Gestaltung verwende ich den WindowBuilder von Google. So habe ich folgenden Code generiert:
Der Listener "searchButton.addActionListener(new ActionListener()" soll das Ergebnis einer anderen Klassenmethode an das JLabel "ergebnisLabel" ausgeben. Ich habe das einmal ausgeklammert, um den Fehler einzugrenzen und stattdessen
gesetzt.
Als Fehlermeldung bekomme ich
Offenbar kann nicht auf das JLabel zugegriffen werden. Was muss ich machen, dass das JLabel "ergebnisLabel" das Ergebnis des Listener ausgeben kann?
Grüße
Sherry
ich versuche mich gerade die GUI-Programmierung zu verstehen. Zur GUI-Gestaltung verwende ich den WindowBuilder von Google. So habe ich folgenden Code generiert:
Java:
package com.sherry.pricecalculator.gui.views;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.UIManager;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import java.awt.Toolkit;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.LayoutStyle.ComponentPlacement;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class AddFrame extends JFrame {
private JPanel contentPane;
private JTextField cityTextField;
private JLabel ergebnisLabel;
/**
* Launch the application.
*/
public static void main(String[] args) {
try {
UIManager.setLookAndFeel("com.seaglasslookandfeel.SeaGlassLookAndFeel");
} catch (Throwable e) {
e.printStackTrace();
}
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
AddFrame frame = new AddFrame();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public AddFrame() {
setIconImage(Toolkit.getDefaultToolkit().getImage(AddFrame.class.getResource("/com/sherry/pricecalculator/gui/resources/images16x16/currency_euro_yellow.png")));
setResizable(false);
setTitle("Reisedaten hinzufügen");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 415, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
final JLabel cityLabel = new JLabel("Projekt-Stadt");
cityTextField = new JTextField();
cityTextField.setColumns(10);
JButton searchButton = new JButton("Suchen");
searchButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
ergebnisLabel.setText("test");
/*Parser search = new Parser();
try {
//ergebnisLabel.setText(String.valueOf(search.parsedistance("Stuttgart", cityTextField.getText()))); //Für Stuttgart Variable setzen
} catch (XPathExpressionException | SAXException | IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}*/
}
});
JLabel lblEntfernung = new JLabel("Entfernung");
JLabel ergebnisLabel = new JLabel("");
GroupLayout gl_contentPane = new GroupLayout(contentPane);
gl_contentPane.setHorizontalGroup(
gl_contentPane.createParallelGroup(Alignment.LEADING)
.addGroup(gl_contentPane.createSequentialGroup()
.addGroup(gl_contentPane.createParallelGroup(Alignment.TRAILING)
.addComponent(searchButton)
.addGroup(gl_contentPane.createSequentialGroup()
.addGroup(gl_contentPane.createParallelGroup(Alignment.TRAILING)
.addComponent(lblEntfernung)
.addComponent(cityLabel))
.addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING)
.addGroup(gl_contentPane.createSequentialGroup()
.addPreferredGap(ComponentPlacement.UNRELATED)
.addComponent(cityTextField, GroupLayout.PREFERRED_SIZE, 281, GroupLayout.PREFERRED_SIZE))
.addGroup(gl_contentPane.createSequentialGroup()
.addGap(33)
.addComponent(ergebnisLabel)))))
.addContainerGap(26, Short.MAX_VALUE))
);
gl_contentPane.setVerticalGroup(
gl_contentPane.createParallelGroup(Alignment.LEADING)
.addGroup(gl_contentPane.createSequentialGroup()
.addContainerGap()
.addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE)
.addComponent(cityLabel)
.addComponent(cityTextField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
.addPreferredGap(ComponentPlacement.UNRELATED)
.addComponent(searchButton)
.addGap(56)
.addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE)
.addComponent(lblEntfernung)
.addComponent(ergebnisLabel))
.addContainerGap(119, Short.MAX_VALUE))
);
contentPane.setLayout(gl_contentPane);
}
}
Der Listener "searchButton.addActionListener(new ActionListener()" soll das Ergebnis einer anderen Klassenmethode an das JLabel "ergebnisLabel" ausgeben. Ich habe das einmal ausgeklammert, um den Fehler einzugrenzen und stattdessen
Java:
ergebnisLabel.setText("test");
Als Fehlermeldung bekomme ich
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at com.sherry.pricecalculator.gui.views.AddFrame$2.actionPerformed(AddFrame.java:78)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3311)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:708)
at java.awt.EventQueue$4.run(EventQueue.java:706)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
Offenbar kann nicht auf das JLabel zugegriffen werden. Was muss ich machen, dass das JLabel "ergebnisLabel" das Ergebnis des Listener ausgeben kann?
Grüße
Sherry