dimanche 7 juin 2015
Event Handling Event Handling in eigene Klasse
Posted on 01:22 by verona
Hallo
Ich bin recht neu im Programmieren und deshalb auch noch sehr unerfahren ,bitte nicht hauen wenn diverse Fehler im Code sind aber aufmerksam machen kann man mich dennoch. :rtfm:
Ich habe ein Programm geschrieben mit einem Table und Buttons und Textfeldern sowie eine JCalendarCombo Box.
Das ganze befand sich alles zumindest der grösste teil in einer Klasse "View" und funktionierte einwandfrei .dann entschloss ich mich alles zu splitten und in verschiedene Klassen auszulagern z.b NordPanel MiddlePanel SuedPanel anschließend wird im Controller alles zusammengefügt und im View dargestellt quasi.Das funktioniert in der Anzeige auch super ich bekomme nur leider das mit dem Actionlistener nicht hin. Die Buttons und Textfelder sowie die JCalendarCombo befinden sich im NordPanel und die Table im Middlepannel. Wie kann ich die Daten nun in das Table einfügen
hier mal der vollständige Code der beiden Panels.
NordPanel:
public class FWNordPanelAusgaben extends JPanel {
private static final long serialVersionUID = 1L;
private JLabel labelout;
private BevelBorder bevel;
private JButton jbtnedit;
private JButton jbtnadd;
private JButton jbtndelete;
final JTextField jtfname;
final JTextField jtfbetrag;
final JCalendarCombo cal;
private JPanel calpanel;
private FWMiddlePanelAusgaben mid;
public FWNordPanelAusgaben() {
super();
this.setLayout(null);
this.setSize(600, 250);
this.setOpaque( true ); /////////////////sichtbarkeit auf true sonst funzt farbauswahl nicht///////////////
this.setBorder(new EmptyBorder(0, 0, 0, 0));
this.setBackground( new Color( 162,183,192 ) );
{
bevel = new BevelBorder(BevelBorder.RAISED);
Border border =bevel;
labelout = new JLabel("Daten Ausgaben");
labelout.setFont(new Font("Arial Marrow", Font.BOLD, 18));
labelout.setLayout(null);
labelout.setBounds(40, 10, 150, 30); //(x,y,Höhe,Breite))))))
labelout.setBorder(border);
labelout.setForeground(new Color(120,111,80));
labelout.setHorizontalAlignment(SwingConstants.CENTER);
}
{
jbtnadd = new JButton("Hinzufügen");
jbtnadd.setLayout(null);
jbtnadd.setBounds(40, 50, 150, 30);
// mid = new FWMiddlePanelAusgaben();
// jbtnadd.addActionListener(new ActionListener() {
//
// @Override
// public void actionPerformed(ActionEvent e) {
// if( e.getSource() == jbtnadd){
// //mid.model.addEinAusgaben(new FWEinAusgaben(jtfname.getText(),cal.getDate(),Double.parseDouble(jtfbetrag.getText()),false));
// mid.model.addEinAusgaben(new FWEinAusgaben("huhu",new Date(),8.9,false));
// }}
// });
// //jbtnadd.addActionListener((ActionListener) new FWMiddlePanelAusgaben());
//
}
{
jbtnedit = new JButton("edit");
jbtnedit.setLayout(null);
jbtnedit.setBounds(40, 100, 150, 30);
}
{
jbtndelete = new JButton("edit");
jbtndelete.setLayout(null);
jbtndelete.setBounds(40, 150, 150, 30);
}
{
jtfname = new JTextField();
jtfname.setLayout(null);
jtfname.setBounds(370, 50, 145, 25);
}
{
jtfbetrag = new JTextField();
jtfbetrag.setLayout(null);
jtfbetrag.setBounds(370, 150, 145, 25);
}
{
cal =new JCalendarCombo(JCalendarCombo.DISPLAY_DATE, false);
cal.putClientProperty("JCalendar.headerStyleer);", "Modern_Arrow");
cal.setDateFormat(new SimpleDateFormat("dd-MM-yyyy"));
calpanel=new JPanel(new BorderLayout());
calpanel.setBounds(370, 100, 145, 25);
calpanel.add(cal,BorderLayout.NORTH);
}
this.add(labelout);
this.add(jbtnadd);
this.add(jbtnedit);
this.add(jbtndelete);
this.add(jtfbetrag);
this.add(jtfname);
this.add(calpanel);
this.validate();
this.repaint();
}
}
MiddlePanel:
public class FWMiddlePanelAusgaben extends JPanel{
public FWPTablemodel.FWTabelmodel model;
public JTable table;
private TableColumnModel tcm;
private JTable lineTable;
private JScrollPane scp;
private FWNordPanelAusgaben npa;
public FWMiddlePanelAusgaben() {
super();
this.setLayout(null);
this.setSize(600, 250);
this.setOpaque( true ); /////////////////sichtbarkeit auf true sonst funzt farbauswahl nicht///////////////
this.setBorder(new EmptyBorder(0, 0, 0, 0));
this.setBackground( new Color( 162,183,192 ) );
{
model = new FWTabelmodel();
table = new JTable(model);
table.setOpaque(true);
table.repaint();
table.revalidate();
}
{
tcm = table.getColumnModel();
tcm.getColumn(0).setPreferredWidth(200);
tcm.getColumn(1).setPreferredWidth(123);
tcm.getColumn(2).setPreferredWidth(80);
tcm.getColumn(3).setPreferredWidth(150);
table.getTableHeader().setResizingAllowed(false);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
}
{
lineTable = new FWLineNumberTable( table );
lineTable.setBackground(Color.LIGHT_GRAY);
}
{
scp = new JScrollPane(table);
scp.setBackground(Color.LIGHT_GRAY);
scp.setHorizontalScrollBarPolicy(HORIZONTAL_SCROLLBAR_NEVER);
scp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);;
scp.getViewport().setBackground(Color.LIGHT_GRAY);
}
scp.setBounds(20, 0, 571, 487);
this.add(scp);
this.add(lineTable);
}
}
mit // gekennzeichnete bereiche war so ne Sache die ich versucht hatte !
in der Klasse wo das Funktionierte lautet die Stelle
{
jbtnadd.addActionListener( new ActionListener() {
@Override public void actionPerformed( ActionEvent e ) {
model.addEinAusgaben(new EinAusgaben(jtname.getText(),cal.getDate(),Double.parseDouble(jtbetrag.getText()),false));
}
});
}
evtl noch ne Frage kann man das komplette Event Handlich auch auslagern wenn ja wie?
vielen Dank schon mal im voraus:)
Ich bin recht neu im Programmieren und deshalb auch noch sehr unerfahren ,bitte nicht hauen wenn diverse Fehler im Code sind aber aufmerksam machen kann man mich dennoch. :rtfm:
Ich habe ein Programm geschrieben mit einem Table und Buttons und Textfeldern sowie eine JCalendarCombo Box.
Das ganze befand sich alles zumindest der grösste teil in einer Klasse "View" und funktionierte einwandfrei .dann entschloss ich mich alles zu splitten und in verschiedene Klassen auszulagern z.b NordPanel MiddlePanel SuedPanel anschließend wird im Controller alles zusammengefügt und im View dargestellt quasi.Das funktioniert in der Anzeige auch super ich bekomme nur leider das mit dem Actionlistener nicht hin. Die Buttons und Textfelder sowie die JCalendarCombo befinden sich im NordPanel und die Table im Middlepannel. Wie kann ich die Daten nun in das Table einfügen
hier mal der vollständige Code der beiden Panels.
NordPanel:
public class FWNordPanelAusgaben extends JPanel {
private static final long serialVersionUID = 1L;
private JLabel labelout;
private BevelBorder bevel;
private JButton jbtnedit;
private JButton jbtnadd;
private JButton jbtndelete;
final JTextField jtfname;
final JTextField jtfbetrag;
final JCalendarCombo cal;
private JPanel calpanel;
private FWMiddlePanelAusgaben mid;
public FWNordPanelAusgaben() {
super();
this.setLayout(null);
this.setSize(600, 250);
this.setOpaque( true ); /////////////////sichtbarkeit auf true sonst funzt farbauswahl nicht///////////////
this.setBorder(new EmptyBorder(0, 0, 0, 0));
this.setBackground( new Color( 162,183,192 ) );
{
bevel = new BevelBorder(BevelBorder.RAISED);
Border border =bevel;
labelout = new JLabel("Daten Ausgaben");
labelout.setFont(new Font("Arial Marrow", Font.BOLD, 18));
labelout.setLayout(null);
labelout.setBounds(40, 10, 150, 30); //(x,y,Höhe,Breite))))))
labelout.setBorder(border);
labelout.setForeground(new Color(120,111,80));
labelout.setHorizontalAlignment(SwingConstants.CENTER);
}
{
jbtnadd = new JButton("Hinzufügen");
jbtnadd.setLayout(null);
jbtnadd.setBounds(40, 50, 150, 30);
// mid = new FWMiddlePanelAusgaben();
// jbtnadd.addActionListener(new ActionListener() {
//
// @Override
// public void actionPerformed(ActionEvent e) {
// if( e.getSource() == jbtnadd){
// //mid.model.addEinAusgaben(new FWEinAusgaben(jtfname.getText(),cal.getDate(),Double.parseDouble(jtfbetrag.getText()),false));
// mid.model.addEinAusgaben(new FWEinAusgaben("huhu",new Date(),8.9,false));
// }}
// });
// //jbtnadd.addActionListener((ActionListener) new FWMiddlePanelAusgaben());
//
}
{
jbtnedit = new JButton("edit");
jbtnedit.setLayout(null);
jbtnedit.setBounds(40, 100, 150, 30);
}
{
jbtndelete = new JButton("edit");
jbtndelete.setLayout(null);
jbtndelete.setBounds(40, 150, 150, 30);
}
{
jtfname = new JTextField();
jtfname.setLayout(null);
jtfname.setBounds(370, 50, 145, 25);
}
{
jtfbetrag = new JTextField();
jtfbetrag.setLayout(null);
jtfbetrag.setBounds(370, 150, 145, 25);
}
{
cal =new JCalendarCombo(JCalendarCombo.DISPLAY_DATE, false);
cal.putClientProperty("JCalendar.headerStyleer);", "Modern_Arrow");
cal.setDateFormat(new SimpleDateFormat("dd-MM-yyyy"));
calpanel=new JPanel(new BorderLayout());
calpanel.setBounds(370, 100, 145, 25);
calpanel.add(cal,BorderLayout.NORTH);
}
this.add(labelout);
this.add(jbtnadd);
this.add(jbtnedit);
this.add(jbtndelete);
this.add(jtfbetrag);
this.add(jtfname);
this.add(calpanel);
this.validate();
this.repaint();
}
}
MiddlePanel:
public class FWMiddlePanelAusgaben extends JPanel{
public FWPTablemodel.FWTabelmodel model;
public JTable table;
private TableColumnModel tcm;
private JTable lineTable;
private JScrollPane scp;
private FWNordPanelAusgaben npa;
public FWMiddlePanelAusgaben() {
super();
this.setLayout(null);
this.setSize(600, 250);
this.setOpaque( true ); /////////////////sichtbarkeit auf true sonst funzt farbauswahl nicht///////////////
this.setBorder(new EmptyBorder(0, 0, 0, 0));
this.setBackground( new Color( 162,183,192 ) );
{
model = new FWTabelmodel();
table = new JTable(model);
table.setOpaque(true);
table.repaint();
table.revalidate();
}
{
tcm = table.getColumnModel();
tcm.getColumn(0).setPreferredWidth(200);
tcm.getColumn(1).setPreferredWidth(123);
tcm.getColumn(2).setPreferredWidth(80);
tcm.getColumn(3).setPreferredWidth(150);
table.getTableHeader().setResizingAllowed(false);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
}
{
lineTable = new FWLineNumberTable( table );
lineTable.setBackground(Color.LIGHT_GRAY);
}
{
scp = new JScrollPane(table);
scp.setBackground(Color.LIGHT_GRAY);
scp.setHorizontalScrollBarPolicy(HORIZONTAL_SCROLLBAR_NEVER);
scp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);;
scp.getViewport().setBackground(Color.LIGHT_GRAY);
}
scp.setBounds(20, 0, 571, 487);
this.add(scp);
this.add(lineTable);
}
}
mit // gekennzeichnete bereiche war so ne Sache die ich versucht hatte !
in der Klasse wo das Funktionierte lautet die Stelle
{
jbtnadd.addActionListener( new ActionListener() {
@Override public void actionPerformed( ActionEvent e ) {
model.addEinAusgaben(new EinAusgaben(jtname.getText(),cal.getDate(),Double.parseDouble(jtbetrag.getText()),false));
}
});
}
evtl noch ne Frage kann man das komplette Event Handlich auch auslagern wenn ja wie?
vielen Dank schon mal im voraus:)
Event Handling Event Handling in eigene Klasse
Categories: Event Handling Event Handling in eigene Klasse
Inscription à :
Publier les commentaires (Atom)
0 commentaires:
Enregistrer un commentaire