2011-08-05 32 views
5

Quiero que JComboBox estar alineado de derecha a izquierda y para representar el texto de derecha a izquierda He establecer la orientación de los componentes y también cambiar la generaría lo siguiente:Render JComboBox a la derecha del problema

import java.awt.Component; 
import java.awt.ComponentOrientation; 
import javax.swing.DefaultListCellRenderer; 
import javax.swing.JLabel; 
import javax.swing.JList; 
import javax.swing.SwingConstants; 

public class NewJFrame extends javax.swing.JFrame { 

    /** Creates new form NewJFrame */ 
    public NewJFrame() { 
     initComponents(); 
     jComboBox1.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);   
jComboBox1.setRenderer(new DefaultListCellRenderer() { 
    public Component getListCellRendererComponent(JList jList, Object o, 
    int i, boolean b, boolean b1) { 
    JLabel rendrlbl = (JLabel) super.getListCellRendererComponent(jList, o, i, b, b1); 
    rendrlbl.setHorizontalAlignment(SwingConstants.RIGHT); 
    return rendrlbl; 
    } 
    }); 


    } 


    @SuppressWarnings("unchecked") 
    // <editor-fold defaultstate="collapsed" desc="Generated Code"> 
    private void initComponents() { 

     jComboBox1 = new javax.swing.JComboBox(); 

     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

     jComboBox1.setEditable(true); 
     jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" })); 

     org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane()); 
     getContentPane().setLayout(layout); 
     layout.setHorizontalGroup(
      layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) 
      .add(layout.createSequentialGroup() 
       .add(55, 55, 55) 
       .add(jComboBox1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 268, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) 
       .addContainerGap(77, Short.MAX_VALUE)) 
     ); 
     layout.setVerticalGroup(
      layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) 
      .add(layout.createSequentialGroup() 
       .add(37, 37, 37) 
       .add(jComboBox1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) 
       .addContainerGap(236, Short.MAX_VALUE)) 
     ); 

     pack(); 
    }// </editor-fold> 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String args[]) { 
     java.awt.EventQueue.invokeLater(new Runnable() { 

      public void run() { 
       new NewJFrame().setVisible(true); 
      } 
     }); 
    } 
    // Variables declaration - do not modify 
    private javax.swing.JComboBox jComboBox1; 
    // End of variables declaration 
} 

enter image description here

Como puede haber visto en esta captura de pantalla, el cuadro combinado y su cursor se alinean a la izquierda mientras la lista está alineada a la derecha. ¿Como puedo resolver esto?

+0

favor enviar el código ejecutable que muestra emite – mKorbel

Respuesta

1

su cursor está alineado a la izquierda mientras la lista está alineada a la derecha. ¿Como puedo resolver esto?

Parece que tienes un cuadro combinado editable. Por lo tanto creo que también es necesario cambiar la orientación del componente de edición:

ComboBoxEditor editor = comboBox.getEditor(); 
JTextField textField = (JTextField)editor.getEditorComponent(); 
textField.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); 
+0

Eso es funciona bien para el editor, pero ¿qué pasa con la orientación de todo el componente? Me refiero a que la imagen de la flecha derecha debe estar alineada a la izquierda. –