Avatar billede halden Nybegynder
25. februar 2003 - 11:34 Der er 2 kommentarer og
1 løsning

knapper i JTable

Her er noget kode genereret af Forte hvor jeg har en JTable i en JScrollpane. I min JTable vil jeg gerne tilføje 2 knapper i de sidste 2 celler i hver række. Det kan jeg bare ikke lige få til at virke.
Nogen foreslag????

Her er koden...


package javaKlient;

import java.util.*;
import javax.swing.*;
import java.awt.*;

public class AdministrerBiler extends javax.swing.JPanel {
   
    GUI_control gui;
   
    /** Creates new form AdministrerBiler */
    public AdministrerBiler(GUI_control gui) {
        this.gui = gui;
        this.setBounds(0,0,700,500);
        initComponents();
        scrollpane.setBounds(20,75,650,300);
    }
   
    /** This method is called from within the constructor to
    * initialize the form.
    * WARNING: Do NOT modify this code. The content of this method is
    * always regenerated by the Form Editor.
    */
    private void initComponents() {
        VelkomstBesked = new javax.swing.JLabel();
        menuKnap = new javax.swing.JButton();
        opretnybilKnap = new javax.swing.JButton();
        scrollpane = new javax.swing.JScrollPane();
        table = new javax.swing.JTable();

        setLayout(null);

        VelkomstBesked.setFont(new java.awt.Font("Dialog", 1, 36));
        VelkomstBesked.setText("Administrer biler");
        add(VelkomstBesked);
        VelkomstBesked.setBounds(180, 20, 290, 40);

        menuKnap.setText("Til menu");
        menuKnap.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                menuKnapActionPerformed(evt);
            }
        });

        add(menuKnap);
        menuKnap.setBounds(200, 390, 100, 26);

        opretnybilKnap.setText("Opret ny bil");
        opretnybilKnap.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                opretnybilKnapActionPerformed(evt);
            }
        });

        add(opretnybilKnap);
        opretnybilKnap.setBounds(320, 390, 100, 26);

        scrollpane.setBackground(new java.awt.Color(255, 255, 255));
        scrollpane.setHorizontalScrollBarPolicy(javax.swing.JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
        scrollpane.setVerticalScrollBarPolicy(javax.swing.JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        scrollpane.setAutoscrolls(true);
        table.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null, null, null, null, null, null},
                {null, null, null, null, null, null, null, null},
                {null, null, null, null, null, null, null, null},
                {null, null, null, null, null, null, null, null},
                {null, null, null, null, null, null, null, null}
            },
            new String [] {
                "Bil_ID", "Mærke", "Model", "Årgang", "Km kørt", "Pris", "Info", "Slet"
            }
        ) {
            boolean[] canEdit = new boolean [] {
                false, false, false, false, false, false, false, false
            };

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        scrollpane.setViewportView(table);

        add(scrollpane);
        scrollpane.setBounds(13, 73, 610, 300);

    }
   
    private void opretnybilKnapActionPerformed(java.awt.event.ActionEvent evt) {
        this.setVisible(false);
        gui.opretbil = new OpretBil(gui);
        gui.opretbil.setVisible(true);
    }
   
    private void menuKnapActionPerformed(java.awt.event.ActionEvent evt) {
        this.setVisible(false);
        gui.hovedmenu.setVisible(true);
    }
   
    protected void visbiler() {
        javax.swing.table.DefaultTableModel t = new javax.swing.table.DefaultTableModel();
        table.setModel(t);
        Vector vec = null;
        t.addColumn((Object)"Bil_ID");
        t.addColumn((Object)"Mærke");
        t.addColumn((Object)"Model");
        t.addColumn((Object)"Årgang");
        t.addColumn((Object)"Km kørt");
        t.addColumn((Object)"Pris");
        t.addColumn((Object)"Info");
        t.addColumn((Object)"Slet");
       
        try {
            vec = gui.admin_control.getBiler();
        }
        catch (java.rmi.RemoteException e) {
            VariableBesked vindue = new VariableBesked("Fejl - biler ikke modtaget! " + e);
            vindue.show();
        }
       
        //Det er her hvor jeg tager vectorerne ud af hovedvectoren og tilføjer
        //2 knapper også lægger jeg vectoren ind i tabellen med t.addRow(mid); -
        //det virker ikke - hvorfor ????
        if (vec.elementAt(0).equals("+") && vec.size() >= 2) {
           
            JFrame frame1 = new JFrame();
            JFrame frame2 = new JFrame();
            final JButton infoknap = new JButton("Info");
            infoknap.setBounds(0,0,30,20);
            final JButton sletknap = new JButton("Slet");
            frame1.getContentPane().add(infoknap);
            frame2.getContentPane().add(sletknap);
            for (int i=1; i<vec.size(); i++) {
                Vector mid = (Vector)vec.elementAt(i);
                mid.addElement(frame1);
                mid.addElement(frame2);
                infoknap.setName((String)mid.elementAt(1));
                sletknap.setName((String)mid.elementAt(1));
                t.addRow(mid);
                infoknap.addActionListener(new java.awt.event.ActionListener() {
                    public void actionPerformed(java.awt.event.ActionEvent evt) {
                        visInfoActionPerformed(infoknap.getName());
                    }
                });
                sletknap.addActionListener(new java.awt.event.ActionListener() {
                    public void actionPerformed(java.awt.event.ActionEvent evt) {
                        visSletActionPerformed(sletknap.getName());
                    }
                });
               
            }//end for
        }//end if
               
    }//end visbiler()
   
    private void visInfoActionPerformed(String name) {
        this.setVisible(false);
        gui.getContentPane().add(gui.bilinfo);
        gui.bilinfo.hentbil(name);
        gui.bilinfo.setVisible(true);
    }
   
    private void visSletActionPerformed(String name) {
        this.setVisible(false);
        gui.getContentPane().add(gui.sletbil);
        gui.sletbil.slet(name);
        gui.sletbil.setVisible(true);
    }
   
    // Variables declaration - do not modify
    private javax.swing.JTable table;
    private javax.swing.JScrollPane scrollpane;
    private javax.swing.JLabel VelkomstBesked;
    private javax.swing.JButton opretnybilKnap;
    private javax.swing.JButton menuKnap;
    // End of variables declaration
}
Avatar billede viht Nybegynder
25. februar 2003 - 13:28 #1
Her er et forsøg på det:

// TableTest.java:
import javax.swing.*;
import javax.swing.table.*;
import javax.swing.text.*;
import java.awt.event.*;
import java.awt.*;

public class TableTest extends JFrame {
   
    private JTable table;
    private ATableModel tableModel;
   
    private JButton addButton;

    public TableTest() {
        super("TableTest");
        setSize(400,400);
        getContentPane().setLayout(new BorderLayout());
       
        tableModel = new ATableModel();
        table = new JTable(tableModel);
        table.addMouseListener(new MyMouseListener());
        table.getTableHeader().setReorderingAllowed(false);
        table.getTableHeader().setResizingAllowed(false);
        table.setDefaultRenderer(JButton.class, new JButtonCellRenderer());
        getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);
       
        JPanel buttons = new JPanel();
        addButton = new JButton("Tilføj");
        addButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent event) {
          addElement();
        }
        });
        buttons.add(addButton);
        getContentPane().add(buttons, BorderLayout.SOUTH);
      }
   
    private void addElement() {
        JButton button1 = new JButton("1");
        button1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event)  {
                System.out.println ("Pressed: 1");
            }
        });
        JButton button2 = new JButton("2");
        button2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event)  {
                System.out.println ("Pressed: 2");
            }
        });
        tableModel.addTableElement(new TableElement("navn", button1, button2));
    }
    private  class MyMouseListener extends MouseAdapter {
        public void mousePressed(MouseEvent e) {
            Object value = table.getValueAt(table.getSelectedRow(), table.getSelectedColumn());
            if( value instanceof JButton ) {
                ((JButton)value).doClick();
            }
        }
    }
    private class JButtonCellRenderer extends JButton implements TableCellRenderer {
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
          if (isSelected) {
                setForeground(table.getSelectionForeground());
                setBackground(table.getSelectionBackground());
            }
            else{
                setForeground(table.getForeground());
                setBackground(UIManager.getColor("Button.background"));
            }
            setText( ((JButton)value).getText() );
            return this;
        }
    }
}


class TestTableTest {
   
    public static void main(String[] args) {
        new TableTest().show();
    }
}
// TableElement.java:
import javax.swing.JButton;

public class TableElement {
   
    private String celle1;
    private JButton celle2;
    private JButton celle3;


    public TableElement(String celle1, JButton celle2, JButton celle3) {
        this.celle1 = celle1;
        this.celle2 = celle2;
        this.celle3 = celle3;
    }
   
    public void setCelle1(String celle1) { this.celle1 = celle1; }
    public void setCelle2(JButton celle2) { this.celle2 = celle2; }
    public void setCelle3(JButton celle3) { this.celle3 = celle3; }
    public String getCelle1() { return (this.celle1); }
    public JButton getCelle2() { return (this.celle2); }
    public JButton getCelle3() { return (this.celle3); }

    public String toString() {

        StringBuffer toString = new StringBuffer();
        toString.append("\ncelle1 = ");
        toString.append(celle1);
        toString.append("\ncelle2 = ");
        toString.append(celle2);
        toString.append("\ncelle3 = ");
        toString.append(celle3);
        toString.append("\n");
       
        return new String(toString);
    }
}

// ATableModel.java:
import javax.swing.table.AbstractTableModel;
import javax.swing.*;

import java.util.Vector;

public class ATableModel extends AbstractTableModel {
    private String[] columns = { "Foo", "Knap1", "Knap2" };
      private Vector data;

    public ATableModel() {
        data = new Vector();
    }

  public int getColumnCount() {
      return columns.length;
  }
   
  public int getRowCount() {
      return data.size();
  }

  public String getColumnName(int column) {
      return columns[column];
  }

  public Object getValueAt(int row, int column) {
      TableElement element = (TableElement)data.elementAt(row);
      Object value = null;
      switch( column ) {
          case 0: {
              value = element.getCelle1();
          } break;
          case 1: {
              value = element.getCelle2();
          } break;
          case 2: {
              value = element.getCelle3();
          } break;
      }
      return value;
  }

  public Class getColumnClass(int column) {
        if( column == 1 || column == 2 )
            return JButton.class;
      return getValueAt(0, column).getClass();
  }

  public boolean isCellEditable(int row, int column) {
      return false;
  }

  public void setValueAt(Object value, int row, int column) {
      switch( column ) {
          case 0: {
              ((TableElement)data.elementAt(row)).setCelle1((String)value);
          } break;
          case 1: {
              ((TableElement)data.elementAt(row)).setCelle2((JButton)value);
          } break;
          case 2: {
              ((TableElement)data.elementAt(row)).setCelle3((JButton)value);
          } break;
      }
      fireTableCellUpdated(row, column);
    }
   
    public void addTableElement(TableElement element) {
        data.add(element);
        fireTableRowsInserted(data.size(), data.size());
    }
   
    public void removeTableElement(int index) {
        if( !(index == -1) ) {
            data.removeElementAt(index);
            fireTableRowsDeleted(index, index);
        }
    }
}
Avatar billede halden Nybegynder
25. februar 2003 - 13:59 #2
tak - det var kanon
Avatar billede viht Nybegynder
25. februar 2003 - 14:23 #3
Det er mig der takker!
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