0

ここに投稿してからしばらく経ちましたが、今また行き詰まっていることに気づきました。

大学での課題として、アドレス帳アプリケーションの作成を依頼されました。順調に進んでおり、ほぼ完成していますが、プロジェクトの一部は純粋に私の好みであり、私にはわかりません。明確にするために、私は採点を得る課題のどの部分についても助けを求めているわけではありません. その証拠が欲しい人がいれば、仕様をアップロードできます。(/開示)

アプリケーションの一部は、カスタム ファイル タイプと vcard 形式からのインポートとエクスポートです。これはうまくいきます。カスタム ファイル タイプには複数の連絡先が含まれ、連絡先ごとに 4 行しかありません。複数の連絡先を保持しているため、新しいウィンドウが開き、ユーザーはファイルにエクスポートする連絡先を選択するよう求められます。これには、ユーザーが連絡先を選択してファイルをエクスポートできる JList が含まれていますが、問題ありません。

私がやろうとしているのは、JList でチェック ボックスを使用できるようにするカスタム セル レンダラーを作成することです。ここ ( http://java.sun.com/docs/books/tutorial/uiswing/components/combobox.html#renderer ) とここ ( http://www.jroller.com/santhosh/ entry/jlist_with_checkboxes )、しかし運が悪い。最初のリンクでは、カスタム セル レンダラーの作成方法について説明していますが、チェック ボックスについては説明していません。2 番目のリンクでは、チェック ボックスの作成方法について説明しています。チェックボックスを表示することはできますが、表示されるのはそれだけです。

後者の例では、リストのメンバーを選択するには、ボックス自体をクリックする必要があります。私ができるようにしたいのは、ユーザーがリスト項目またはチェックボックスをクリックして項目を選択できるようにすることです。

私が機能したチェックボックスだけのバージョンでは、選択は機能しましたが、複数のアイテムを選択するにはctrlを押し続ける必要がありました。複数のアイテムを選択するためにctrlが必要ないようにする方法はありますか? クリックで修飾子を読み取ることができることは知っていますが、指定されたオブジェクトのクリックにそれらを適用できるかどうかはわかりません。

あなたの考え、コメント、提案、リンク、正確な回答はすべて大歓迎です! :)

4

2 に答える 2

1

これは、ある種、それを行います。チェックボックスは実際には何もしないため、本質的に偽物ですが、チェックボックスをオンにするとリストアイテムが選択されます。

import java.awt.Component;
import java.awt.FlowLayout;

import javax.swing.BoxLayout;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.ListCellRenderer;


public class Relequestual extends JFrame {

   private final FunkyCellRendererComponent funkyCRC = new FunkyCellRendererComponent();

   public Relequestual() {
      getContentPane().setLayout(new FlowLayout());

      String[] items = { "Item 1", "Item 2", "Item 3", "Item 4" };
      JList theList = new JList(items);
      theList.setCellRenderer(
      new ListCellRenderer() {
         @Override
         public Component getListCellRendererComponent(JList list, Object value, int index,
               boolean isSelected, boolean cellHasFocus) {
            funkyCRC.setup(list, value, index, isSelected, cellHasFocus);
            return funkyCRC;
         }
      });
      getContentPane().add(theList);

   }

   /**
    * @param args
    */
   public static void main(String[] args) {
      Relequestual gui = new Relequestual();
      gui.pack();
      gui.setVisible(true);
   }

   class FunkyCellRendererComponent extends JPanel {

      private JCheckBox checkBox = new JCheckBox();
      private JLabel label = new JLabel();
      private JList list;
      private int index;

      public FunkyCellRendererComponent() {
         super(null);
         setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
         add(this.checkBox);
         add(this.label);
      }

      public void setup(JList list, Object value, int index,
               boolean isSelected, boolean cellHasFocus) {
         this.list = list;
         this.index = index;
         this.label.setText((String) list.getModel().getElementAt(index)); 
         if (isSelected) {
            setForeground(list.getSelectionForeground());
            setBackground(list.getSelectionBackground());
         } else {
            setForeground(list.getForeground());
            setBackground(list.getBackground());
         }
         this.checkBox.setSelected(isSelected);
      }

   }

}
于 2009-11-26T22:20:12.023 に答える
0

JTable を使用し、チェックボックスを別の列として追加します。

次に、MouseListener をテーブルに追加し、他の列がチェックされるたびに、チェックボックスの値を切り替えます。

于 2009-11-26T21:24:30.167 に答える