2012-04-21 11 views
3

私は占有するコンポーネントの一部よりかなり長いテキストを用意しています。私は問題のほとんどのための合理的な解決策を思いついたが、私はコンボボックスで非常に長いテキスト項目をどうすればいいかわからない。ユーザーがテキストを見ることができない場合、特にテキストの最初の部分が一致する場合、彼は正しい決定をすることができません。下記の私のSSCCEを参照してください。コンボボックスで非常に長いテキスト項目を扱う方法

JTextfieldで長いテキストの問題を解決するためにJScrollpaneを使用しましたが、私はツールチップを使用してJXhyperlinkフィールドの長いテキストを解決しました。また、選択された後に長い項目を表示できるコンボボックスのツールチップが表示されますが、彼が選択する前にそのオプションをユーザーに与えたいと思っています。このコード例は、NetbeansのGUIデザイナ(RADの目的に最適)を使用してまとめられ、レイアウトはGUIデザイナが使用するGroupLayoutです。あなたがJTextArea以上はとにかく点以上JComboBox

由来JListからJTextPane可能性が置くことができます

package longtextsexample; 

import javax.swing.JFileChooser; 

public class MainFrame extends javax.swing.JFrame { 

    /** 
    * Creates new form MainFrame 
    */ 
    public MainFrame() { 
     initComponents(); 
    } 

    /** 
    * This method is called from within the constructor to initialize the form. 
    */ 
    @SuppressWarnings("unchecked") 
    private void initComponents() { 

     jScrollPane1 = new javax.swing.JScrollPane(); 
     jTextField1 = new javax.swing.JTextField(); 
     jComboBox1 = new javax.swing.JComboBox(); 
     jXHyperlink1 = new org.jdesktop.swingx.JXHyperlink(); 
     jButton1 = new javax.swing.JButton(); 

     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

     jScrollPane1.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); 
     jScrollPane1.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER); 
     jScrollPane1.setViewportView(jTextField1); 

     jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 222222222222222222222222", "Item 333333333333333333333333", "Item 333333333333333333333333444444444444" })); 
     jComboBox1.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       jComboBox1ActionPerformed(evt); 
      } 
     }); 

     jXHyperlink1.setText("Path"); 

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

     javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
     getContentPane().setLayout(layout); 
     layout.setHorizontalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addGap(10, 10, 10) 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
        .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 164, javax.swing.GroupLayout.PREFERRED_SIZE) 
        .addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, 164, javax.swing.GroupLayout.PREFERRED_SIZE) 
        .addGroup(layout.createSequentialGroup() 
         .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 19, javax.swing.GroupLayout.PREFERRED_SIZE) 
         .addGap(6, 6, 6) 
         .addComponent(jXHyperlink1, javax.swing.GroupLayout.PREFERRED_SIZE, 130, javax.swing.GroupLayout.PREFERRED_SIZE)))) 
     ); 
     layout.setVerticalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addGap(11, 11, 11) 
       .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 44, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addGap(18, 18, 18) 
       .addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addGap(18, 18, 18) 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
        .addComponent(jButton1) 
        .addGroup(layout.createSequentialGroup() 
         .addGap(4, 4, 4) 
         .addComponent(jXHyperlink1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))) 
     ); 

     pack(); 
    } 

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { 
     JFileChooser jfc = new JFileChooser(); 
     String path; 

     if (jfc.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) { 
      path = jfc.getSelectedFile().getAbsolutePath(); 
     } else { 
      path = ""; 
     } 
     jXHyperlink1.setText(path); 
     jXHyperlink1.setToolTipText(path); 
    } 

    private void jComboBox1ActionPerformed(java.awt.event.ActionEvent evt) { 
     jComboBox1.setToolTipText(jComboBox1.getSelectedItem().toString()); 
    } 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String args[]) { 
     /* 
     * Set the Nimbus look and feel 
     */ 

     /* 
     * If Nimbus (introduced in Java SE 6) is not available, stay with the 
     * default look and feel. For details see 
     * http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
     */ 
     try { 
      for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { 
       if ("Nimbus".equals(info.getName())) { 
        javax.swing.UIManager.setLookAndFeel(info.getClassName()); 
        break; 
       } 
      } 
     } catch (ClassNotFoundException ex) { 
      java.util.logging.Logger.getLogger(MainFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (InstantiationException ex) { 
      java.util.logging.Logger.getLogger(MainFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (IllegalAccessException ex) { 
      java.util.logging.Logger.getLogger(MainFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (javax.swing.UnsupportedLookAndFeelException ex) { 
      java.util.logging.Logger.getLogger(MainFrame.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 MainFrame().setVisible(true); 
      } 
     }); 
    } 
    // Variables declaration 
    private javax.swing.JButton jButton1; 
    private javax.swing.JComboBox jComboBox1; 
    private javax.swing.JScrollPane jScrollPane1; 
    private javax.swing.JTextField jTextField1; 
    private org.jdesktop.swingx.JXHyperlink jXHyperlink1; 
    // End of variables declaration 
} 

答えて

6
How to deal with very long text items in comboboxes 

1)はシンプルかもしれないが、なぜ

があるので、それを行います2)Combo Box Popup、私は設定することをお勧めしますsetMaximumWidth

+0

ありがとう本当にうまくいくでしょう。 – wmdvanzyl

+0

あなたは正しいですが、より良いものはありません:-) – mKorbel

+0

私はそれが動作するようになるとすぐに回答にしますが、私はすでにそれをupvoted。 – wmdvanzyl

関連する問題