जावा में त्रिकोणीय राज्य स

वोट
11

मैं वास्तव में जावा में एक त्रिकोणीय कहा चेकबॉक्स इस्तेमाल कर सकते हैं। यह एक सरल बात की तरह लगता है, लेकिन मैं केवल वास्तव में देखा है बदसूरत कार्यान्वयन [ध्यान दें: लिंक अब टूट गया]।

तीन रेडियो बटन बहुत ज्यादा अचल संपत्ति उठाने और शायद मेरे मामले में उपयोगकर्ताओं के लिए भ्रमित कर दिया जाएगा। यह एक खोज संवाद के लिए मूल रूप से है। मैं सच है, झूठी की जरूरत है या परवाह नहीं है विकल्प। वहाँ एक अलग तकनीक है कि लोगों का उपयोग है?

11/08/2009 को 23:25
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


9 जवाब

वोट
14

एक ड्रॉप-डाउन का उपयोग करें।

11/08/2009 को 23:26
का स्रोत उपयोगकर्ता

वोट
0

मैं सिर्फ एक आप पोस्ट का उपयोग करेंगे।

जब तक आपके जटिलता अन्य वर्ग (है कि काम करता है) में है और यह किसी भी अन्य नियंत्रण, कौन परवाह करता तरह काम करता है? (यही कारण है कि, सबसे स्विंग कक्षाएं इस जटिल के बारे में होने लगते हैं स्विंग के सभी के पीछे धारणा हो रहा है।)

11/08/2009 को 23:55
का स्रोत उपयोगकर्ता

वोट
2

यही कारण है कि "बदसूरत कार्यान्वयन" एक पुराने कड़ी है। उस पृष्ठ पर सुझावों में से एक कुछ साल पहले अपडेट किया गया। मैं पुराने कार्यान्वयन का परीक्षण नहीं किया है, इसलिए यदि नया एक किसी भी बेहतर या बदतर है मैं नहीं जानता।

TristateCheckBox पर दोबारा गौर

12/08/2009 को 00:57
का स्रोत उपयोगकर्ता

वोट
0

यूआई बदलें। त्रिकोणीय राज्य चेक-बॉक्स असामान्य है और वास्तव में उपयोगकर्ताओं को भ्रमित कर सकते हैं। ड्रॉप डाउन अच्छा विकल्प है, लेकिन संवाद के भीतर एक से अधिक घटना के लिए यह भी उपयोगकर्ता के लिए भ्रम की स्थिति का एक बहुत लाएगा।

12/08/2009 को 10:28
का स्रोत उपयोगकर्ता

वोट
5

मैं बस एक श्रोता को जोड़कर एक त्रिकोणीय राज्य चेकबॉक्स बनाने के लिए एक रास्ता मिल गया:


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);
        }
    }
}

फिर आवेदन कोड में, यह सिर्फ एक पंक्ति है:


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

सभी प्रतिक्रिया के बाद, मैं एक ड्रॉप-डाउन एक बेहतर विकल्प हो सकता है सोच रहा हूँ। लेकिन, मैं यहाँ हर किसी के लिए अपने कोड साझा करना चाहते थे।

12/08/2009 को 18:15
का स्रोत उपयोगकर्ता

वोट
2

त्रिकोणीय राज्य चेक-बॉक्स का आंशिक रूप से जाँच की बच्चों नोड्स के साथ Treeviews के लिए मानक यूआई मुहावरा है। वे व्यापक रूप से इस तरह के गूगल अर्थ के रूप में जटिल hierarchial विचारों में परत प्रबंधन में किया जाता है।

30/09/2009 को 08:14
का स्रोत उपयोगकर्ता

वोट
3

Jide खुला उनके में कुछ बहुत अच्छी कार्यक्षमता sourced है आम लेयर , जिनमें से एक एक त्रिकोणीय राज्य चेकबॉक्स होता है

त्रिकोणीय राज्य चेक बॉक्स

मेरा सुझाव है कि आप चलाने जाना webstart डेमो देखने के लिए अगर यह अपनी आवश्यकताओं को पूरा

24/03/2012 को 12:43
का स्रोत उपयोगकर्ता

वोट
4

यहाँ छवि विवरण दर्ज

इस कार्यान्वयन में तीन राज्य केवल प्रोग्राम के रूप में के माध्यम से स्थापित किया जा सकता। होना करने के लिए देखो और यह छवियों, कि एक ही जावा पैकेज के अंदर रखा जाना चाहिए का उपयोग पोर्टेबल महसूस करें।

यहाँ छवि विवरण दर्ज यहाँ छवि विवरण दर्ज यहाँ छवि विवरण दर्ज

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();
        }
    }
}

नमूना फ्रेम:

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;
}
09/04/2013 को 10:18
का स्रोत उपयोगकर्ता

वोट
4

मैं जानता हूँ कि, जबकि क्यों किसी को भी अतिरिक्त आइकन png फ़ाइलों के साथ समाधान देना होगा न जावा एपीआई के लिए महान funcionality देता अधिभावी paintIcon (..) विधि।

सबसे अच्छा हल्के समाधान चेक बॉक्स राज्य याद करने के लिए IMO है ClientProperty विशेषता।

यहाँ छवि विवरण दर्ज

/*
 * 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));
    }
}

उपयोग: TCheckBox tcb = new TCheckBox("My CheckBox");

05/11/2014 को 04:03
का स्रोत उपयोगकर्ता

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