ただし、フェイシャルコースのリストをチェックボックスJava Swing?

StackOverflow https://stackoverflow.com/questions/19766

  •  09-06-2019
  •  | 
  •  

質問

池尾:そういうふうに考えていない品目の一覧をチェックボックスにそれぞれJava Swing?

I.。JListの商品を使用してテキストは、チェックボックス?

役に立ちましたか?

解決

をカスタム ListCellRenderer とasignで JList.

このカスタム ListCellRenderer を返す必要があ JCheckbox のimplementantionの getListCellRendererComponent(...) 方法。

この JCheckbox ませんが編集可能な、シンプルな塗装の画面で選択するこ JCheckbox として扱うことができるようになチェックはしない

例えば、ショーでチェック時の行が選択されたパラメータ isSelectedこのチェック状態のままでも見ることができmantained場合の選択に変わります。そのより良いを受けているときはその次のコンサルティングデータを以下の ListModel, ものではございません、次のメソッドを実装した変化をチェック状態のデータは、通知の変更を JList を塗り替えられました。

今後のサンプルコードの後に請求-お問い合わせはこちら

ListCellRenderer

他のヒント

素晴らしい答えが、これまでの CheckBoxList.を実装するTelcontarの回答が3年前)...私も使っていまJava1.6のない課題です。いものを追加しました addCheckbox 方法はこのような形になります。(ょうが短くなJavaが):

public void addCheckbox(JCheckBox checkBox) {
    ListModel currentList = this.getModel();
    JCheckBox[] newList = new JCheckBox[currentList.getSize() + 1];
    for (int i = 0; i < currentList.getSize(); i++) {
        newList[i] = (JCheckBox) currentList.getElementAt(i);
    }
    newList[newList.length - 1] = checkBox;
    setListData(newList);
}

また、デモのJidesoftもの CheckBoxList また一部の問題行動もおこなってしまいます。私をいつでも変更することが答えを見つけましたが問題に CheckBoxList 私はリンクです。

いろみの利用 JTable ではなく JList 以来、デフォルトのレンダリングのチェックボックスはいろいろ見ていただけるカスタム TableModel, CellRendererCellEditor を表すboolean値です。もちろん、私が想像して行bajillion倍ています。太陽 良い例.

で実施 ListCellRenderer

public class CheckboxListCellRenderer extends JCheckBox implements ListCellRenderer {

    public Component getListCellRendererComponent(JList list, Object value, int index, 
            boolean isSelected, boolean cellHasFocus) {

        setComponentOrientation(list.getComponentOrientation());
        setFont(list.getFont());
        setBackground(list.getBackground());
        setForeground(list.getForeground());
        setSelected(isSelected);
        setEnabled(list.isEnabled());

        setText(value == null ? "" : value.toString());  

        return this;
    }
}

トレンダリング

JList list = new JList();
list.setCellRenderer(new CheckboxListCellRenderer());

この結果

CheckboxListCellRenderer example

詳細 カスタムのswingコンポーネントレンダリング.

PS:したい場合はラジオの元素で置き換え extends JCheckboxextends JRadioButton.

より良い解決のためのJava7の新しい

まずこの問いを実現したものはすごいパワーが秘められているメ足しています。今日では、JListのであることがより良いソリューション。

私の解の一般JCheckBoxList:

import java.awt.Component;

import javax.swing.*;
import javax.swing.border.*;

import java.awt.event.*;

@SuppressWarnings("serial")
public class JCheckBoxList extends JList<JCheckBox> {
  protected static Border noFocusBorder = new EmptyBorder(1, 1, 1, 1);

  public JCheckBoxList() {
    setCellRenderer(new CellRenderer());
    addMouseListener(new MouseAdapter() {
      public void mousePressed(MouseEvent e) {
        int index = locationToIndex(e.getPoint());
        if (index != -1) {
          JCheckBox checkbox = (JCheckBox) getModel().getElementAt(index);
          checkbox.setSelected(!checkbox.isSelected());
          repaint();
        }
      }
    });
    setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
  }

  public JCheckBoxList(ListModel<JCheckBox> model){
    this();
    setModel(model);
  }

  protected class CellRenderer implements ListCellRenderer<JCheckBox> {
    public Component getListCellRendererComponent(
        JList<? extends JCheckBox> list, JCheckBox value, int index,
        boolean isSelected, boolean cellHasFocus) {
      JCheckBox checkbox = value;

      //Drawing checkbox, change the appearance here
      checkbox.setBackground(isSelected ? getSelectionBackground()
          : getBackground());
      checkbox.setForeground(isSelected ? getSelectionForeground()
          : getForeground());
      checkbox.setEnabled(isEnabled());
      checkbox.setFont(getFont());
      checkbox.setFocusPainted(false);
      checkbox.setBorderPainted(true);
      checkbox.setBorder(isSelected ? UIManager
          .getBorder("List.focusCellHighlightBorder") : noFocusBorder);
      return checkbox;
    }
  }
}

動的に追加JCheckBoxのリストを作成する必要があります自分のListModelを追加するDefaultListModel.

DefaultListModel<JCheckBox> model = new DefaultListModel<JCheckBox>();
JCheckBoxList checkBoxList = new JCheckBoxList(model);

DefaultListModel 一般、このように利用できる方法で指定したJAVA7API こちらの このように:

model.addElement(new JCheckBox("Checkbox1"));
model.addElement(new JCheckBox("Checkbox2"));
model.addElement(new JCheckBox("Checkbox3"));

オッズはw/Javaは、誰か一人が実施済みのウィジェットやユあります。共済組合の給付の対象のOSです。必要なホイール管理ソリューションを提供しないと思います。この場合にはこういう学習CellRenderersや編集者

私のプロジェクトは大成功とJIDE.のコンポーネントごと、チェックボックスのチェックリストのJIDE共通層であるOSおよび開催java.net).の商業作品は良いもんです。

http://www.jidesoft.com/products/oss.htm https://jide-oss.dev.java.net/

お勧めしを使ったJPanelをGridLayoutの1カラムです。追加のチェックボックスのJPanel、JPanelとしてのデータソースのJScrollPane.を選択したチェックボックス、電話getComponents()のJPanelをチェックします。

ここではほんの少しのほか、JCheckBoxListによるRawa.これを追加する機能を選択使用スペースバーがあります。複数ある場合には項目を選択したすべてに設定されます逆に価値の最初の項目です。

        addKeyListener(new KeyAdapter() {
        @Override
        public void keyPressed(KeyEvent e) {
            int index = getSelectedIndex();
            if (index != -1 && e.getKeyCode() == KeyEvent.VK_SPACE) {
                boolean newVal = !((JCheckBox) (getModel()
                        .getElementAt(index))).isSelected();
                for (int i : getSelectedIndices()) {
                    JCheckBox checkbox = (JCheckBox) getModel()
                            .getElementAt(i);
                    checkbox.setSelected(newVal);
                    repaint();
                }
            }
        }
        });

すべての集成分のスイング、部品その他の部品など、JTableは、JTree、またはJComboBoxでき、高度にカスタマイズいたします。例えば、JTable成分を正常に表示グリッドのJLabelの部品が可能であり、これまでのようにも表示JButtons,JTextFields、その他のJTables.ってこれらの集合部品表示デフォルト以外のオブジェクトの一環しています。作成し適正に対応できるキーボードやマウスイベントはいくらくタスクにより、スイングの分離の構成要素を"レンダリング"および"です。" この分離した(論貧しいデザインの選択肢としている複雑な事からスイング。

ういうの充実スイングのJListコンポーネントで表示チェックボックスの代わりに表示するによるスイング哲学は、実施の二つのインターフェイス:ListCellRenderer(図面のチェックボックス)、CellEditor(取り扱いにキーボードやマウスイベントのチェックボックス).実施のListCellRendererインタフェースも容易であるが、CellEditorインターフェースでは不器用なものと理解され難い。この場合、私はあなたを忘れCellEditorが、リスクや対応入力イベントを直接に示すように以下のコードです。

import javax.swing.*;
import javax.swing.border.*;
import java.awt.*;
import java.awt.event.*;

public class CheckBoxList extends JList
{
   protected static Border noFocusBorder = new EmptyBorder(1, 1, 1, 1);

   public CheckBoxList()
   {
      setCellRenderer(new CellRenderer());

      addMouseListener(new MouseAdapter()
         {
            public void mousePressed(MouseEvent e)
            {
               int index = locationToIndex(e.getPoint());

               if (index != -1) {
                  JCheckBox checkbox = (JCheckBox)
                              getModel().getElementAt(index);
                  checkbox.setSelected(
                                     !checkbox.isSelected());
                  repaint();
               }
            }
         }
      );

      setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
   }

   protected class CellRenderer implements ListCellRenderer
   {
      public Component getListCellRendererComponent(
                    JList list, Object value, int index,
                    boolean isSelected, boolean cellHasFocus)
      {
         JCheckBox checkbox = (JCheckBox) value;
         checkbox.setBackground(isSelected ?
                 getSelectionBackground() : getBackground());
         checkbox.setForeground(isSelected ?
                 getSelectionForeground() : getForeground());
         checkbox.setEnabled(isEnabled());
         checkbox.setFont(getFont());
         checkbox.setFocusPainted(false);
         checkbox.setBorderPainted(true);
         checkbox.setBorder(isSelected ?
          UIManager.getBorder(
           "List.focusCellHighlightBorder") : noFocusBorder);
         return checkbox;
      }
   }
}

ここで、遮マウスクリックからの開発に数カ月をシミュレーションをクリックし、適切なチェックを入れて下さい。その結果、"CheckBoxList"コンポーネントの両方がより簡単に、より小さいと同等のものを用いてコンポーネントのCellEditorインタフェース。るクラスを使用し、インスタンスを生成し、そのパスで配列のJCheckBoxオブジェクト(またはサブクラスのJCheckBoxオブジェクト)を呼び出しsetListData.なお、チェックボックスこれは、このコンポーネントにお答えできませんkeypresses(のcommandがきのいずれであっても、常に付加ご自身のキーリスナーが必要です。

ソース: DevX.com

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top