14. maj 2010 - 17:29Der er
6 kommentarer og 1 løsning
Abstractformatter eller anden løsning på objects i JTextField
Jeg har en formular. I formularen er der et JTextField.
Jeg har en klasse der hedder Deltager. I Deltager-klassen er der en metode der hedder toString.
Hvordan får jeg JTextField'et til at acceptere et objekt og selv bruge toString til at hente en String for objektet? Altså, så jeg kan skrive jtextfield.setText(deltager)? (hvor jtextfield selvfølgelig er en instans af JTextField, og deltager tilsvarende for Deltager)
Jeg har googlet mig frem til, at jeg skulle kunne bruge JFormattedTextField med en AbstractFormatter - men jeg kan ikke finde ud af hvordan. Så nu vælger jeg den (nemme) løsning, og spørger jer!
public class Formatting2 extends JFrame { private JFormattedTextField jftf; private JButton jbtn; public Formatting2() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); getContentPane().setLayout(new BorderLayout()); setTitle("Formatting"); jftf = new JFormattedTextField(); jftf.setFormatterFactory(new AbstractFormatterFactory() { @Override public AbstractFormatter getFormatter(JFormattedTextField tf) { return new AbstractFormatter() { @Override public Object stringToValue(String text) throws ParseException { if(text.equals("")) return null; return new Foobar2(Integer.parseInt(text.substring(4, text.length()-4))); } @Override public String valueToString(Object value) throws ParseException { if(value == null) return ""; if(value instanceof Foobar2) { return "****" + ((Foobar2)value).getV() + "****"; } else { throw new RuntimeException(value.getClass().getName() + " is not supported"); } } }; }
}); jftf.setValue(new Foobar2(177)); getContentPane().add(jftf, BorderLayout.CENTER); jbtn = new JButton("Test"); jbtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { ((Foobar2)jftf.getValue()).test(); } }); getContentPane().add(jbtn, BorderLayout.SOUTH); pack(); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { JFrame f = new Formatting2(); f.setVisible(true); } }); } }
class Foobar2 { private int v; public Foobar2(int v) { this.v = v; } public int getV() { return v; } public void setV(int v) { this.v = v; } @Override public String toString() { return Integer.toString(v); } public void test() { JOptionPane.showMessageDialog(null, "v=" + v); } }
Synes godt om
Ny brugerNybegynder
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.