Avatar billede oleoleo1 Nybegynder
08. februar 2009 - 13:25 Der er 8 kommentarer og
1 løsning

JSpinner, bytte rundt på spinner og tekstfeldt

Hej Eksperten.

Jeg skal løse en simpel opgave med Java swing/awt, og jeg er bestemt ikke velbevandret i den grafiske del af Java. Jeg skal bruge en JSpinner som tæller en float op eller ned. Dette virker også fint. Jeg har dog et billede som det skal ligne, og på dette sidder tekstfeltet til JSpinneren på højre side af knapperne. Jeg har ikke kunne finde noget eksempel endnu hvor tekstfeltet ikke sidder på venstre side.

Hvordan får man flyttet displayet om på den anden side? Jeg har tænkt på alternativt, hvis man kan slå teksfeltet fra/fjerne det fra knapperne, så kan jeg lave et tekstfelt på den anden side af knapperne som læser floaten med mySpinner.getValue(), hvis det ikke kan lade sig gøre at bytte rundt, så hvis nogen ved hvordan man evt. kan fjerne diplayet helt i spinneren, kan det måske være et nødhack.

Håber nogen kan svare!
Avatar billede oleoleo1 Nybegynder
08. februar 2009 - 13:49 #1
Jeg skal faktisk også have en enhed bagefter i feltet, så jeg må antage at det med at fjerne/gøre tekstfeltet til spinneren usynligt må være måden at gøre det på.
Avatar billede _carsten Nybegynder
08. februar 2009 - 15:58 #2
Det er ret nemt at vende tekstfelt, se eksempel

import java.awt.ComponentOrientation;

public class NewJFrame extends javax.swing.JFrame {


    public NewJFrame() {
        initComponents();
    }


    private void initComponents() {

        spin_LeftToRight = new javax.swing.JSpinner();
        spin_RightToLeft = new javax.swing.JSpinner();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        getContentPane().setLayout(new java.awt.FlowLayout());
        getContentPane().add(spin_LeftToRight);
        getContentPane().add(spin_RightToLeft);

        // HER VENDER DU DEN !
        spin_RightToLeft.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
       
        pack();
    }


    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new NewJFrame().setVisible(true);
            }
        });
    }

    private javax.swing.JSpinner spin_LeftToRight;
    private javax.swing.JSpinner spin_RightToLeft;
}
Avatar billede oleoleo1 Nybegynder
08. februar 2009 - 16:25 #3
Ahh nice! Der havde jeg sjovt nok også været omkring flere gange, jeg har bare skrevet syntaksen forkert hehe.

Jeg skal dog stadig have 'kg' på som enhed. Ved hvordan man gør det? Jeg har et andet tekstfelt som udfører det rigtige, så hvis man kan fjerne spinnerens tekstfelt vil det også løse problemet.
Avatar billede _carsten Nybegynder
08. februar 2009 - 17:03 #4
Du laver bare din egen editor og sætter den på spinneren

Eksempel igen med ny editor.

import java.awt.ComponentOrientation;


public class NewJFrame extends javax.swing.JFrame {

    public NewJFrame() {
        initComponents();
    }

    private void initComponents() {

        spin_LeftToRight = new javax.swing.JSpinner();
        spin_RightToLeft = new javax.swing.JSpinner();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        getContentPane().setLayout(new java.awt.FlowLayout());

        spin_LeftToRight.setPreferredSize(new java.awt.Dimension(100, 20));
        getContentPane().add(spin_LeftToRight);

        spin_RightToLeft.setPreferredSize(new java.awt.Dimension(100, 20));
        getContentPane().add(spin_RightToLeft);

        spin_RightToLeft.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);

        spin_LeftToRight.setEditor(new MyEditor(spin_LeftToRight, "Kg "));
        spin_RightToLeft.setEditor(new MyEditor(spin_RightToLeft, "Stk "));

        pack();
    }


    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new NewJFrame().setVisible(true);
            }
        });
    }

    private javax.swing.JSpinner spin_LeftToRight;
    private javax.swing.JSpinner spin_RightToLeft;
}





// Editor

import javax.swing.JSpinner;
import javax.swing.JTextField;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class MyEditor extends JTextField implements ChangeListener{
    private JSpinner s;
    private String text = "";

    public MyEditor(JSpinner s, String text){
        this.s = s;
        this.text = text;
        s.addChangeListener(this);
        setFocusable(false);
        setHorizontalAlignment(JTextField.RIGHT);

        setText(text + s.getValue());
    }

    public void stateChanged(ChangeEvent e) {
        setText(text + s.getValue());
    }
}
Avatar billede oleoleo1 Nybegynder
08. februar 2009 - 17:38 #5
Jeps, det virker! tusind tak! Det er dog som om editoren overskriver min spinnermodel nu;
så tekstfeltet er blevet squezet lidt, så der ikke længere kan være 3 decimaler (0.000 kg). Hvordan sætter jeg nu størrelsen på tekstfeltet?

(ja undskyld det er sikkert noob spørgsmål, men det er som sagt ret nyt for mig at rode med GUI i Java).

Bare smid det som svar, så du kan få points..
Avatar billede _carsten Nybegynder
08. februar 2009 - 17:47 #6
Jeg tror ikke editoren er klemt sammen, men du sætter størrelsen på din JSpinner med

setPreferredSize(new Dimension(WIDTH, HEIGHT))
setMinimumSize(new Dimension(WIDTH, HEIGHT))
setMaximumSize(new Dimension(WIDTH, HEIGHT))

alt afhængig af den LayoutManager du bruger, den kan overrule størrelsen som du definerer.
Avatar billede _carsten Nybegynder
08. februar 2009 - 17:49 #7
Mener jeg har lagt et svar, skal lige vende mig til den nye udgave af eksperten, hvis det nogensinde bliver muligt
Avatar billede oleoleo1 Nybegynder
08. februar 2009 - 17:57 #8
Super, you are the man! Jeg kan ikke se du har lagt et svar..
Avatar billede _carsten Nybegynder
08. februar 2009 - 19:43 #9
Så kommer der et svar her
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