Avatar billede backupmand Nybegynder
28. september 2003 - 19:18 Der er 7 kommentarer

Bedste komponent for JButtons i en JScrollPane?

Jeg skal tilføje JButtons til en komponent, denne komponent skal ind i en JScrollPane - men hvilken komponent er den nemmeste at benytte, når der her drejer sig om dynamisk oprettelse af knapper på et minimalt område (derfor JScrollPane) ?
jeg har tænkt på JTable eller JList, men der er alt det bøvl med Renderers. Jeg kan ikke få en JPanel ind i JScrollPanen, er det forkert at benytte en sådan komponent. Det er hele 2 spørgsmål, men jeg har heller ikke flere.
Avatar billede _carsten Nybegynder
28. september 2003 - 19:22 #1
Du kan sagtens putte et JPanel i et SCrollPane
Avatar billede backupmand Nybegynder
28. september 2003 - 19:46 #2
Ja det kan jeg godt.
Avatar billede _carsten Nybegynder
28. september 2003 - 20:01 #3
Okay !


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;



public class JButtonTableExample extends JFrame {

  public JButtonTableExample(){
    super( "JButtonTable Example" );

    DefaultTableModel dm = new DefaultTableModel();
    dm.setDataVector(new Object[][]{{"button 1"},
                                    {"button 2"},
                                    {"button 3"},
                                    {"button 4"},
                                    {"button 5"},
                                    {"button 6"},
                                    {"button 7"},
                                    {"button 8"},
                                    {"button 9"},
                                    {"button 10"},
                                    {"button 11"}},
                    new Object[]{"Button"});

    JTable table = new JTable(dm);
    table.getColumn("Button").setCellRenderer(new ButtonRenderer());
    table.getColumn("Button").setCellEditor(new ButtonEditor(new JCheckBox()));
    JScrollPane scroll = new JScrollPane(table);
    getContentPane().add( scroll );
    setSize( 400, 100 );
    setVisible(true);
  }

  public static void main(String[] args) {
    JButtonTableExample frame = new JButtonTableExample();
    frame.addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        System.exit(0);
      }
    });
  }
}




class ButtonEditor extends DefaultCellEditor {
  protected JButton button;
  private String    label;
  private boolean  isPushed;

  public ButtonEditor(JCheckBox checkBox) {
    super(checkBox);
    button = new JButton();
    button.setOpaque(true);
    button.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        fireEditingStopped();
      }
    });
  }

  public Component getTableCellEditorComponent(JTable table, Object value,
                  boolean isSelected, int row, int column) {
    if (isSelected) {
      button.setForeground(table.getSelectionForeground());
      button.setBackground(table.getSelectionBackground());
    } else{
      button.setForeground(table.getForeground());
      button.setBackground(table.getBackground());
    }
    label = (value ==null) ? "" : value.toString();
    button.setText( label );
    isPushed = true;
    return button;
  }

  public Object getCellEditorValue() {
    if (isPushed)  {
      JOptionPane.showMessageDialog(button ,label + ": Ouch!");
    }
    isPushed = false;
    return new String( label ) ;
  }

  public boolean stopCellEditing() {
    isPushed = false;
    return super.stopCellEditing();
  }

  protected void fireEditingStopped() {
    super.fireEditingStopped();
  }
}






class ButtonRenderer extends JButton implements TableCellRenderer {

  public ButtonRenderer() {
    setOpaque(true);
  }

  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( (value ==null) ? "" : value.toString() );
    return this;
  }
}


Så må resten være op til dig !
Avatar billede backupmand Nybegynder
28. september 2003 - 20:51 #4
Okay!
Ha ha. Dovenskaben længe leve, er man doven må man give point
Avatar billede _carsten Nybegynder
28. september 2003 - 21:01 #5
Ja - jeg ved ikke om du kan bruge det, men det var et eksempel jeg havde
liggende.

Selv ville jeg jo nok vælge et JPanel med et GridLayout, væsenligt
nemmere, hurtigere og meget mere simpelt.
Avatar billede conrad Nybegynder
28. september 2003 - 21:48 #6
måske kan du bruge en toolbar ? (ved ikke selv om det kan lade sig gøre og har ikke tid til at lave et eksempel)
Avatar billede _carsten Nybegynder
02. december 2003 - 20:39 #7
Ud fra din kommentar 28/09-2003 20:51:12, må vel være tid !!
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