Tristate jelölőnégyzetei Java

szavazat
11

Tudtam igazán használni a tri-megállapította négyzetet a Java. Úgy hangzik, mint egy egyszerű dolog, de eddig csak nagyon csúnya megvalósítások [megjegyzés: a link most megtört].

Három rádió gombok csak hogy túl sok ingatlan, és valószínűleg zavaró a felhasználók számára az én esetemben. Ez alapvetően egy kereső párbeszéd. Kell igaz, hamis, vagy „nem érdekel” lehetőséget. Van egy másik technika, hogy az emberek használni?

A kérdést 11/08/2009 23:25
a forrás felhasználó
Más nyelveken...                            


9 válasz

szavazat
14

Használjon legördülő menüből.

Válaszolt 11/08/2009 23:26
a forrás felhasználó

szavazat
0

Én csak használja az egyik hozzászóló.

Mindaddig, amíg a komplexitás másik osztályba (ami működik), és úgy viselkedik, mint bármely más ellenőrzés, kit érdekel? (Úgy tűnik, ez a feltételezés mögött swing, swing legtöbb osztályok úgy tűnik, hogy ezt a bonyolult.)

Válaszolt 11/08/2009 23:55
a forrás felhasználó

szavazat
2

Ez a „csúnya implementáció” régi link. Az egyik javaslat az oldalon frissítették egy pár évvel ezelőtt. Én még nem teszteltem a régi végrehajtását, így nem tudom, ha az újat minden jobb vagy rosszabb.

TristateCheckBox Revisited

Válaszolt 12/08/2009 00:57
a forrás felhasználó

szavazat
0

Változás az UI. Tristate check-box szokatlan és valóban megzavarhatja a felhasználókat. A legördülő jó lehetőség, de több mint egy eseménynek dialógus azt is, hogy sok zavart a felhasználó.

Válaszolt 12/08/2009 10:28
a forrás felhasználó

szavazat
5

Találtam egy módja annak, hogy a tri-state négyzetet, csak hozzá egy hallgató:


public class TriStateActionListener implements ActionListener{
    final protected Icon icon;

    public TriStateActionListener(Icon icon){
        this.icon=icon;
    }

    public static Boolean getState(javax.swing.JCheckBox cb){
        if (cb.getIcon()==null) return null;
        if (cb.isSelected()) return true;
        else return false;
    }

    public void actionPerformed(ActionEvent e) {
        javax.swing.JCheckBox cb=(javax.swing.JCheckBox)e.getSource();
        if (!cb.isSelected()){
            cb.setIcon(icon);
        }
        else if (cb.getIcon()!=null){
            cb.setIcon(null);
            cb.setSelected(false);
        }
    }
}

Ezután az alkalmazás kódját, ez csak egy sort:


jCheckBox1.addActionListener(new TriStateActionListener(getResourceMap().getIcon("TriStateIcon")));

Miután az összes visszajelzést, gondolkodom egy legördülő lehet a jobb választás. De szerettem volna megosztani a kódot itt mindenki másnak.

Válaszolt 12/08/2009 18:15
a forrás felhasználó

szavazat
2

Tristate jelölõnégyzete szabvány UI idióma Treeviews részlegesen ellenőrzött gyermek csomópontokat. Ezek széles körben használják a réteg menedzsment komplex hierarchikus nézetek, mint a Google Earth.

Válaszolt 30/09/2009 08:14
a forrás felhasználó

szavazat
3

Jide már nyílt forrásúvá néhány nagyon szép funkciók azok közös réteg , amelyek közül az egyik történetesen egy háromállású négyzetet

Tristate négyzeteket

Azt javaslom, hogy menjen futni a WebStart demo , hogy ha ez megfelel az Ön igényeinek

Válaszolt 24/03/2012 12:43
a forrás felhasználó

szavazat
4

írja kép leírása itt

Ebben az alkalmazásban a három állam lehet csak beállítani keresztül programozott. Hogy Megjelenés hordozható azt képeket használ, amelyeket vissza kell helyezni a ugyanazt a java csomagot.

írja kép leírása itt írja kép leírása itt írja kép leírása itt

public class TristateCheckBox extends JCheckBox {

    private static final long serialVersionUID = 1L;
    private boolean halfState;
    private static Icon selected = new javax.swing.ImageIcon(TristateCheckBox.class.getResource("selected.png"));
    private static Icon unselected = new javax.swing.ImageIcon(TristateCheckBox.class.getResource("unselected.png"));
    private static Icon halfselected = new javax.swing.ImageIcon(TristateCheckBox.class.getResource("halfselected.png"));

    @Override
    public void paint(Graphics g) {
        if (isSelected()) {
            halfState = false;
        }
        setIcon(halfState ? halfselected : isSelected() ? selected : unselected);
        super.paint(g);
    }

    public boolean isHalfSelected() {
        return halfState;
    }

    public void setHalfSelected(boolean halfState) {
        this.halfState = halfState;
        if (halfState) {
            setSelected(false);
            repaint();
        }
    }
}

Minta keret:

public class NewJFrame19 extends javax.swing.JFrame {

    private final TristateCheckBox myCheckBox;

    public NewJFrame19() {
        myCheckBox = new TristateCheckBox();
        myCheckBox.setText("123123");
        add(myCheckBox);

        jButton1 = new javax.swing.JButton();

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

        jButton1.setText("jButton1");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });
        getContentPane().add(jButton1);

        pack();
    }

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        myCheckBox.setHalfSelected(true);
    }                                        

    public static void main(String args[]) {

        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Windows".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(NewJFrame19.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(NewJFrame19.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(NewJFrame19.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(NewJFrame19.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new NewJFrame19().setVisible(true);
            }
        });
    }
    private javax.swing.JButton jButton1;
}
Válaszolt 09/04/2013 10:18
a forrás felhasználó

szavazat
4

Nem tudom, hogy valaki adna a megoldások további ikon png fájlokat, miközben Java API ad nagyszerű funkcionalitás a kényszerítő paintIcon (..) módszer.

A legjobb könnyű megoldást emlékezni CheckBox állam IMO ClientProperty attribútumot.

írja kép leírása itt

/*
 * Tri-state checkbox example
 * @s1w_
*/
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;


class TCheckBox extends JCheckBox implements Icon, ActionListener {

    final static boolean MIDasSELECTED = true;  //consider mid-state as selected ?


    public TCheckBox() { this(""); }

    public TCheckBox(String text) {
        super(text);
        putClientProperty("SelectionState", 0);
        setIcon(this);
        addActionListener(this);
    }

    public TCheckBox(String text, int sel) {
        /* tri-state checkbox has 3 selection states:
         * 0 unselected
         * 1 mid-state selection
         * 2 fully selected
        */
        super(text, sel > 1 ? true : false);

        switch (sel) {
            case 2: setSelected(true);
            case 1:
            case 0:
                putClientProperty("SelectionState", sel);
                break;
           default:
                throw new IllegalArgumentException();
        }
        addActionListener(this);
        setIcon(this);
    }

    @Override
    public boolean isSelected() {
        if (MIDasSELECTED && (getSelectionState() > 0)) return true;
        else return super.isSelected();
    }

    public int getSelectionState() {
        return (getClientProperty("SelectionState") != null ? (int)getClientProperty("SelectionState") :
                                         super.isSelected() ? 2 :
                                         0);
    }

    public void setSelectionState(int sel) {
        switch (sel) {
            case 2: setSelected(true);
                    break;
            case 1: 
            case 0: setSelected(false);
                    break;
           default: throw new IllegalArgumentException();
        }
        putClientProperty("SelectionState", sel);
    }


    final static Icon icon = UIManager.getIcon("CheckBox.icon");

    @Override
    public void paintIcon(Component c, Graphics g, int x, int y) {
        icon.paintIcon(c, g, x, y);
        if (getSelectionState() != 1) return;

        int w = getIconWidth();
        int h = getIconHeight();
        g.setColor(c.isEnabled() ? new Color(51, 51, 51) : new Color(122, 138, 153));
        g.fillRect(x+4, y+4, w-8, h-8);

        if (!c.isEnabled()) return;
        g.setColor(new Color(81, 81, 81));
        g.drawRect(x+4, y+4, w-9, h-9);
    }

    @Override
    public int getIconWidth() {
        return icon.getIconWidth();
    }

    @Override
    public int getIconHeight() {
        return icon.getIconHeight();
    }

    public void actionPerformed(ActionEvent e) {
        TCheckBox tcb = (TCheckBox)e.getSource();
        if (tcb.getSelectionState() == 0)
            tcb.setSelected(false);

        tcb.putClientProperty("SelectionState", tcb.getSelectionState() == 2 ? 0 :
                                                     tcb.getSelectionState() + 1);

        // test
        System.out.println(">>>>IS SELECTED: "+tcb.isSelected());
        System.out.println(">>>>IN MID STATE: "+(tcb.getSelectionState()==1));
    }
}

használat: TCheckBox tcb = new TCheckBox("My CheckBox");

Válaszolt 05/11/2014 04:03
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more