1

再会。我对CellRenderer这些东西还很陌生,而且我还在读很多关于它的东西。现在,我遇到了一些我不确定如何工作的事情。通过将其设置为自定义,我可以将其JPanel放入我的内部。但这是一个百万美元的问题:我如何与控件交互?JListCellRenderer

我的意思是,我希望能够右键单击包含 my 的单元格jPanel,右键单击以显示一些操作,然后突出显示选定的行。

我怎样才能做到这一点?

这是我的代码:

import java.awt.CardLayout;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class cellTest extends JPanel{
    JLabel label;

    public cellTest(){
        buildInterface();
    }

    private void buildInterface(){
        label = new JLabel();

        setLayout(new CardLayout());
        add(label);
    }

    public void setText(String text){
        String pre = "<html><body style='width: 200px;'>";
        label.setText(pre+text);
    }
}

第二部分:

    import Read.Medicine_Cell;
    import java.awt.CardLayout;
    import java.awt.Component;
    import javax.swing.DefaultListCellRenderer;
    import javax.swing.DefaultListModel;
    import javax.swing.JFrame;
    import javax.swing.JList;
    import javax.swing.JScrollPane;

public class testjava {
    public static void main(String args[]){
        JFrame jf = new JFrame();
        jf.setSize(500, 500);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.setLayout(new CardLayout());

        JList list = new JList();
        DefaultListModel dlm = new DefaultListModel();

        dlm.addElement("This is a test");
        dlm.addElement("I wanna know if it works");
        dlm.addElement("Pardon if im not that good yet");
        dlm.addElement("or my problem is basic");

        list.setModel(dlm);
        list.setCellRenderer(new MyCellRenderer());
        jf.add(new JScrollPane(list));
        jf.show();
    }
    static class MyCellRenderer extends DefaultListCellRenderer{
        final cellTest cellx = new cellTest();
        @Override
        public Component getListCellRendererComponent(final JList list, final Object value, final int index, final boolean isSelected, final boolean hasFocus){
            final String text = (String) value;
            cellx.setText(text);
            return cellx;
        }
    }
}
4

0 回答 0