SwingでJLabelsを使用してカスタムリストを作成したいとします。 (VLCプレイリストのように)。 JTableやListの代わりにJLabelsを選択したのは、imageIconのようなカスタマイズを容易にするためです。Swing Javaでカスタムリストを作成する
今は問題があります。ドラッグすることでラベルを上下に移動できます(行の順序を変更する)。 JLableはボックスレイアウトでリストとして表示されます。誰かがこれで私を助けることができますか? Jabelの位置を設定した後にjPanelを再描画することはできますか?
public class playListPanel extends JPanel {
private mediaList mdList;
private JPanel base;
private JScrollPane scrollPane;
private boolean locked = false;
private JLabel lockedlb ;
public playListPanel(mediaList mdList){
this.mdList = mdList;
this.setLayout(new BorderLayout());
init();
this.addMouseListener(new MouseAdapter(){
public void mouseMoved(MouseEvent evt){
if(locked){
lockedlb.setLocation(evt.getPoint());
base.repaint();
}
}
public void mouseDragged(MouseEvent evt){
lockedlb.setLocation(evt.getPoint());
base.repaint();
}
public void mouseRelease(MouseEvent evt){
if(locked){
int y = evt.getY();
int n = y%20;
mediaList temp = (mediaList) mdList.copy();
temp.remove(Integer.getInteger(lockedlb.getName())-1);
temp.insert(mdList.get(Integer.getInteger(lockedlb.getName())-1),n);
mdList.set(temp);
init();
base.repaint();
locked = true;
}else{
}
}
});
}
public void init(){
base = new JPanel();
base.setPreferredSize(new Dimension(300,0));
scrollPane = new JScrollPane(base);
base.setLayout(new BoxLayout(base,BoxLayout.Y_AXIS));
int i= 0;
for(Object m : this.mdList){
i = i+1;
media temp = (media)m;
JLabel label = new JLabel(" "+ temp.getMediaTitle());
label.setName("" +i);
label.setMaximumSize(new Dimension(label.getPreferredSize().width,label.getPreferredSize().height+4));
label.addMouseListener(new MouseAdapter(){
public void mousePressed(MouseEvent evt){
locked =true;
lockedlb = label;
//label.setLocation(evt.getPoint());
}
public void mouseMoved(MouseEvent evt){
if(locked){
lockedlb.setLocation(evt.getPoint());
base.repaint();
}
}
public void mouseDragged(MouseEvent evt){
lockedlb.setLocation(evt.getPoint());
base.repaint();
}
public void mouseRelease(MouseEvent evt){
if(locked){
int y = evt.getY();
int n = y%20;
mediaList temp = (mediaList) mdList.copy();
temp.remove(Integer.getInteger(lockedlb.getName())-1);
temp.insert(mdList.get(Integer.getInteger(lockedlb.getName())-1),n);
mdList = temp;
init();
base.repaint();
locked = true;
}else{
}
}
}
);
base.add(label);
this.add(base,BorderLayout.CENTER);
}
}
}
コード...コードを投稿してください! –
'" JTableやListの代わりにJLabelsを選んだのは、imageIconのようなカスタマイズを簡単にできるからです。 "これがJLabelsを選択しない理由です。 JTables、特にJListsはImageIconを非常にうまく処理でき、ハンドコードJLabelの構造を実装するのがずっと簡単です。 –
@HovercraftFullOfEelsありがとうございます。私はJListをチェックして、A CellRendererを使ってイメージを使用することに気付きましたか?とにかく私はそれを実装し、これまでのところうまくいきました。 –