Wiki - JTable-Tutorial


#1

@Beni
könntest du das JTable (Tutorial)© – Byte-Welt Wiki etwas überarbeiten?
Vehicel statt Vehicle liest sich dort ja ganz ärgerlich

nach
http://forum.byte-welt.net/java-forum/spiele-und-multimedia-programmierung/18324-wav-sound-abspielen.html#post129082
habe ich für das Model eine Variante ohne eigene Verwaltung von Listener und komplizierte Events gebastelt,
nur fireTableDataChanged(); überall, nicht ganz schön, aber weitaus kürzer, als Ersatz mit Warnung oder als zweite Variante vielleicht akzeptabel?

    private String[] columnNames = new String[]  {"Name", "Fahrgäste", "Räder", "Besitzt Motor"};
    private Class[] columnClasses = new Class[] {String.class, Integer.class, Integer.class, Boolean.class};
    private List<Vehicle> vehicles = new ArrayList<>();

    public void addVehicle(Vehicle vehicle) {
        this.vehicles.add(vehicle);
        fireTableDataChanged();
    }

    public void sort() {
        Collections.sort(this.vehicles);
        fireTableDataChanged();
    }

    @Override
    public int getColumnCount() {
        return this.columnNames.length;
    }

    @Override
    public int getRowCount() {
        return this.vehicles.size();
    }

    @Override
    public String getColumnName(int column) {
        return this.columnNames[column];
    }

    @Override
    public Class getColumnClass(int column) {
        return this.columnClasses[column];
    }

    @Override
    public Object getValueAt(int row, int column)    {
        Vehicle v = this.vehicles.get(row);
        switch (column) {
            case 0:
                return v.getName();
            case 1:
                return Integer.valueOf(v.getPlaces());
            case 2:
                return Integer.valueOf(v.getWheels());
            case 3:
                return v.hasMotor() ? Boolean.TRUE : Boolean.FALSE;
            default:
                return null;
        }
    }

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

    @Override
    public void setValueAt(Object aValue, int row, int column)  {
        // nicht beachten
    }
}

in der GUI passt dazu noch für neue Sortieren-Funktionalität,
falls diese Sortieren-Variante nicht stört, immerhin auch eigene Unterseite am Ende

        final JButton buttonSort = new JButton("sort");
        buttonSort.addActionListener(new ActionListener()
            {
                @Override
                public void actionPerformed(ActionEvent e)
                {
                    model.sort();
                }
            });
        JPanel buttons = new JPanel();
        buttons.add(buttonAdd);
        buttons.add(buttonSort);

....

content.add(buttons, BorderLayout.SOUTH);

#2

Ich kann mal reingucken. Ich schreib mir eine Notiz, damit ich das hoffentlich nicht vor dem Wochenende vergessen haben :wink:


#3

Bei der Gelegenheit gleich die 6er-Links auf 8 updaten :smiley:


#4

Das geht einfach mit dem {{JAPI}}-Tag. Dann werden die Links immer auf die aktuelle, im Tag eingebaute, Java-Version gesetzt.

z.B. {{JAPI|JTableModel}} Ich glaube, einige Links habee ich auf diese Art schon mal ersetzt.


#5

Habe ich jetzt mal gemacht…

Kannst du das mal alleine machen, ich bin mir nicht sicher, wo das hin gehört.


#6

ach, Themen von vor 2 Jahren nun weiterführen…