Avatar billede OBS Juniormester
Oprettet i går kl. 19:42 Der er 2 kommentarer

En lille kundekartotekprogram

Nu har jeg skitseret  ramme, menu  : se her
import javax.swing.*;

    public class SwingMenu {
        public static void main(String[] args) {
            JFrame frame = new JFrame("Kundekartotek"); // Ny  ramme
            JMenuBar menuBar = new JMenuBar();          // Her menu  linie

            //  Oprette  menu
            JMenu menu = new JMenu("Kundegrupper");  // Oprette  menu
           
            //  Oprette  menupunkt
            JMenuItem option1 = new JMenuItem("København");  // Ny menupunkt
            JMenuItem option2 = new JMenuItem("Århus");      // Ny menupunkt
            JMenuItem option3 = new JMenuItem("Ålborg");    //  Ny menupunkt
            JMenuItem exit = new JMenuItem("Exit");

            // Tilføje action listeners til menu punkter
            option1.addActionListener(e -> JOptionPane.showMessageDialog(frame, "København")); //
            option2.addActionListener(e -> JOptionPane.showMessageDialog(frame, "Århus"));
            option3.addActionListener(e -> JOptionPane.showMessageDialog(frame, "Ålborg"));
            exit.addActionListener(e -> System.exit(0));

            // Tilføje menupunkter til  menu
            menu.add(option1);
            menu.add(option2);
            menu.add(option3);
            menu.addSeparator(); // Tilføje separator linie
            menu.add(exit);

            // Tilføje menu bar til rammen
            menuBar.add(menu);
           
            // Sætte menuen til rammen
            frame.setJMenuBar(menuBar);
            frame.setSize(300, 200);    //
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true);
        }
    }

Det er så view-delen. Men der skal jo komme  "liv"  i programmet, men hvordan ?
Avatar billede arne_v Ekspert
Skrevet i går kl. 20:08 #1
Du har jo allerede action på dine menu items.

Men mit gæt er at menuer er et vildspor. Du skal have en relativ kompleks GUI for at have brug for menuer. Often vil simple felter, tabeller og knapper være nok.

JTextField og JButton giver dig simple felter og knapper.

For en tabel så laver du en klasse som extender AbstractTableModel, laver en instans af den (ved at læse data fra database eller andet sted fra) og wrapper den i en JTable.
Avatar billede arne_v Ekspert
Skrevet i går kl. 20:09 #2
Et gammelt eksempel:


import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableModel;

public class TableFromDatabase extends JFrame {
    private static final long serialVersionUID = 1L;
    private JTable tbl;
    private JButton btn;
    public TableFromDatabase() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        getContentPane().setLayout(new BorderLayout());
        setTitle("Table from database");
        tbl = new JTable();
        getContentPane().add(new JScrollPane(tbl), BorderLayout.CENTER);
        btn = new JButton("Read from database");
        btn.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                tbl.setModel(loadQuery("com.mysql.jdbc.Driver", "jdbc:mysql://localhost/Test", "root", "", "SELECT f1,f2 FROM t1"));
            }
        });
        getContentPane().add(btn, BorderLayout.SOUTH);
        pack();
    }
    TableModel loadQuery(String driver, String conurl, String un, String pw, String sql) {
        GeneralDatabaseModel res = new GeneralDatabaseModel();
        try {
            Class.forName(driver);
            Connection con = DriverManager.getConnection(conurl, un, pw);
            Statement stmt = con.createStatement();
            ResultSet rs = stmt.executeQuery(sql);
            ResultSetMetaData rsmd = rs.getMetaData();
            for(int colix = 1; colix <= rsmd.getColumnCount(); colix++) {
                res.addColumn(rsmd.getColumnName(colix));
            }
            while(rs.next()) {
                List<Object> row = new ArrayList<Object>();
                for(int colix = 1; colix <= rsmd.getColumnCount(); colix++) {
                    row.add(rs.getObject(colix));
                }
                res.addRow(row);
            }
            rs.close();
            stmt.close();
            con.close();
            return res;
        } catch (ClassNotFoundException e) {
            JOptionPane.showMessageDialog(this, e.getMessage());
            return null;
        } catch (SQLException e) {
            JOptionPane.showMessageDialog(this, e.getMessage());
            return null;
        }
    }
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                JFrame f = new TableFromDatabase();
                f.setVisible(true);
            }
        });
    }
}

class GeneralDatabaseModel extends AbstractTableModel {
    private static final long serialVersionUID = 1L;
    private List<String> colnams;
    private List<List<Object>> data;
    public GeneralDatabaseModel() {
        colnams = new ArrayList<String>();
        data = new ArrayList<List<Object>>();
    }
    public void addColumn(String colnam) {
        colnams.add(colnam);
    }
    public void addRow(List<Object> row) {
        data.add(row);
    }
    @Override
    public int getColumnCount() {
        return colnams.size();
    }
    @Override
    public int getRowCount() {
        return data.size();
    }
    @Override
    public String getColumnName(int colix) {
        return colnams.get(colix);
    }
    @Override
    public Object getValueAt(int rowix, int colix) {
        return data.get(rowix).get(colix);
    }
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester