を変更しません。 setText部分は機能しますが、なぜセルの背景色が変わらないのか分かりません。誰もが何かアイディアを持っています、ありがとう!カスタムListCellRendererは、私はこのクラスを持っている背景色
4
A
答えて
8
のための主な問題は、ラベルが、デフォルトでは非不透明であるということですので、あなたが塗られるバックグラウンドためにラベルを不透明にする必要があります。
ただし、カスタムレンダラーを作成する必要はありません。デフォルトのレンダラーは不透明です。あなたがする必要があるのは、リストの選択の背景プロパティを設定されています
list.setSelectionBackground(Color.RED);
あなたは右のあなただけのデフォルトのレンダリングのプロパティを設定することができますし、テキストを整列するレンダラを作成しようとしている場合:
をDefaultListCellRenderer renderer = (DefaultListCellRenderer)list.getCellRenderer();
renderer.setHorizontalAlignment(SwingConstants.RIGHT);
6
例
import java.awt.*;
import java.io.File;
import javax.swing.*;
import javax.swing.filechooser.FileSystemView;
public class FilesInTheJList {
private static final int COLUMNS = 5;
private Dimension size;
public FilesInTheJList() {
final JList list = new JList(new File("C:\\").listFiles()) {
private static final long serialVersionUID = 1L;
@Override
public Dimension getPreferredScrollableViewportSize() {
if (size != null) {
return new Dimension(size);
}
return super.getPreferredScrollableViewportSize();
}
};
list.setFixedCellHeight(50);
list.setFixedCellWidth(150);
size = list.getPreferredScrollableViewportSize();
size.width *= COLUMNS;
list.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
list.setCellRenderer(new MyCellRenderer());
list.setVisibleRowCount(0);
list.setLayoutOrientation(JList.HORIZONTAL_WRAP);
JFrame f = new JFrame("Files In the JList");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(new JScrollPane(list));
f.pack();
f.setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
FilesInTheJList fITJL = new FilesInTheJList();
}
});
}
private static class MyCellRenderer extends JLabel implements ListCellRenderer {
private static final long serialVersionUID = 1L;
@Override
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
if (value instanceof File) {
File file = (File) value;
setText(file.getName());
setIcon(FileSystemView.getFileSystemView().getSystemIcon(file));
if (isSelected) {
setBackground(Color.red);
setForeground(Color.blue);
} else {
setBackground(list.getBackground());
setForeground(list.getForeground());
}
//setPreferredSize(new Dimension(250, 25));
//setEnabled(list.isEnabled());
setFont(list.getFont());
setOpaque(true);
}
return this;
}
}
}
1
デフォルトではJLabel
は透過です。あなたは、それがバックグラウンドを表示したい場合は、以下のものが必要です。
label.setOpaque(true);
また、あなたは多くの場合、リスト自体のUIのテーマやカスタマイズに収まる親リストのデフォルトの背景色を、使用したい:
if (isSelected) {
label.setForeground(list.getSelectionForeground());
label.setBackground(list.getSelectionBackground());
} else {
label.setForeground(list.getForeground());
label.setBackground(list.getBackground());
}
はすべて一緒にそれを置く:
import javax.swing.*;
import java.awt.*;
public class CustomListCellRenderer implements ListCellRenderer<MyObject>
{
@Override
public Component getListCellRendererComponent(JList<? extends MyObject> list,
MyObject value,
int index,
boolean isSelected,
boolean cellHasFocus)
{
JLabel label = new JLabel();
label.setOpaque(true);
label.setText(value.getName());
if (isSelected) {
label.setForeground(list.getSelectionForeground());
label.setBackground(list.getSelectionBackground());
} else {
label.setForeground(list.getForeground());
label.setBackground(list.getBackground());
}
return label;
}
}
関連する問題
- 1. CSSは、私はhtmlのテストを持っている黄色の背景
- 2. UIView.animateは、私はライトグレーの背景色で複数のラベルを持っている、と私はUIColor.clearにその色をアニメーション化する背景色
- 3. カスタム背景色のカスタムUIPickerView
- 4. カスタム背景色フレックスボックス
- 5. は、私は色を生成するためにこれを持っているのTextViewの背景
- 6. カスタムXLFormセクションの背景色
- 7. 背景私はAppDelegate内のコードのこの部分を持っているパズル
- 8. iphone UIAlertView - カスタム背景色
- 9. grid.arrangeまたはarrangeGrobのメインタイトルは灰色の背景を持っています
- 10. は、私が使用して背景画像を持つページを持っている背景画像
- 11. アニメーション機能は、私がナビゲートアンカーでアニメーションの背景色に問題が持っている色とアンカー
- 12. 背景色は
- 13. は、私はカスタム背景描画可能とのEditTextを持っているのEditText
- 14. 私のSQLクエリは、私は、このクラスを持っている
- 15. タグは、私は奇妙な状況を持っている背景色のRGBAの不透明度
- 16. Androidのカスタムリストビューは、私は、カスタムアダプタを持っている選択の背景
- 17. 背景クリップは、私は次のCSSコードを持っているMozillaの
- 18. JavaScriptで「背景色:背景」 - 色を取得するには?
- 19. Androidのカスタム背景XML、私は次のXMLファイル持つ属性
- 20. Androidのクラス、私はこのクラスを持っているRelativeLayout(onResume)
- 21. 迅速な背景には、私はAppDelegateに次のコードを持っている
- 22. JTextPaneの行にカスタム背景色を設定するには
- 23. カスタムCollectionViewCellの背景色を変更するには?
- 24. .BackgroundColorは、背景色
- 25. Java:カスタムListCellRendererを更新するには?
- 26. 画像は存在しますが、私は私のCSSファイルでこれを持っている背景
- 27. ポップアップメニューのテキストの色は、動作していない背景色は、私が持っている私のメインのアプリのテーマに微細
- 28. は、私はこのクラスを持っているJavaの
- 29. PHPのコンストラクタは、私はこのクラスを持っている
- 30. SQLAlchemyのは、私はこのコードを持っているクラス
だけ注意を:それは 'setOpaque(true)を持つことが重要です;'そこに、私はOPのレンダラが正しく動作しなかった理由それはだと思います。 – Jeffrey
レンダラーでsetPreferredSize()またはsetEnabledを呼び出す必要はありません。また、setOpaque()メソッドはコンストラクタで呼び出される必要があります。レンダラーが呼び出されるたびに実行する必要はありません。また、JListには選択背景と前景を設定するプロパティがあります。これらの色をレンダラーでハードコーディングするべきではありません。 – camickr
@camickr - 実際には、リストを無効にする必要がある場合はsetEnabled _is_が必要です。背景画像を表示する場合は、不透明度を設定します(無条件ではなくリストの値に設定する必要があります)。 – kleopatra