类型JList的方法未定义 - 放置方法的位置?

时间:2013-12-18 10:07:03

标签: java class methods

我正在尝试在JList上调用一个方法,但是我得到了“为JList定义的方法”错误。问题是我不知道该方法应该去哪里。这是没有方法的代码:

public class Jp_Diskussion extends JPanel {
    private Jd_BeitragErstellen jd_beitr_erst;
    private Jd_BeitragBearbeiten jd_beitr_bearb;
    private JFrame parentFrame = (JFrame) this.getParent();
    private JComboBox comboBoxMA;
    private JComboBox comboBoxTag;
    private JButton btnFiltern;
    private JLabel labelFiltern;
    private JLabel labelOpt;
    private JButton btnBeitragVerfassen;
    private JScrollPane messageScroll;
    private JList messageList;
    private DefaultListModel messageModel;

public Jp_Diskussion() {
    createMessageList();
}

public void getMessage(String author, String text, String date, String tag) {
     messageModel.addElement(new Message(author, text, date, tag));
}

private void createMessageList() {
    setBounds(new Rectangle(0, 0, 994, 624));
    setLayout(null);
    add(getJScrollPane());
    add(getComboBoxTag());
    add(getComboBox_2());
    add(getBtnFiltern());
    add(getLabelFiltern());
    add(getLabelOpt());
    add(getBtnBeitragVerfassen());



    messageList.getMessage("NAME AUTOR", "<html><body style='width: 690px;'>Lorem ipsum dolor sit amet.", "22.01.13", "SOA");
    messageList.getMessage("AUTOR NAME", "<html><body style='width: 690px;'>Lorem ipsum dolor sit amet.", "22.01.13", "SOA");

}

private JList getMessageList() {
    if (messageList == null) {
        messageModel = new DefaultListModel();
        messageList = new JList(messageModel);
        messageList.setCellRenderer(new MessageRenderer());     
    }
    return messageList;
}



private JScrollPane getJScrollPane() {
    if (messageScroll == null) {
        messageScroll = new JScrollPane(getMessageList());
        messageScroll.setBounds(20, 20, 954, 461);
    }
    return messageScroll;
}

private JButton getBtnBeitragVerfassen() {

private JLabel getLabelFiltern() {

private JLabel getLabelOpt() {

private JComboBox getComboBoxTag() {
private JComboBox getComboBox_2() {
private JButton getBtnFiltern() {
}

这是方法:

public void getMessage(String author, String text, String date, String tag) {
     messageModel.addElement(new Message(author, text, date, tag));
}

现在,如果我在createMessageList方法之外定义getMessage方法,则在createMessageList中调用getMessage时会出现上述错误。如果我在getMessageList方法中定义了getMessage方法,该方法无法工作,因为我无法在另一个方法中定义方法。

但我应该在哪里定义呢?

代码段3:

public class MessageList extends JPanel{
  DefaultListModel messageModel = new DefaultListModel();
  JList  messageList = new JList(messageModel);
  JScrollPane     messageScroll = new JScrollPane(messageList);
  MessageRenderer messageRenderer = new MessageRenderer();

     public MessageList( ){
        messageList.setCellRenderer(messageRenderer);

        add(messageScroll,BorderLayout.CENTER);
     }

     public void ladeBeitrag(String author, String text, String date, String tag){
         messageModel.addElement(new Message(author, text, date, tag));
     }

     public static void main(String[]args){
         MessageList m = new MessageList(); 
          JFrame f = new JFrame("JPanel inside JList");
          f.setSize(900, 750);
          f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          f.setVisible(true);
          f.add(m);

          m.ladeBeitrag("NAME AUTOR", "<html><body style='width: 690px;'>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren.", "22.01.13", "SOA");
          m.ladeBeitrag("AUTOR NAME", "<html><body style='width: 690px;'>Lorem ipsum dolor sit amet.", "22.01.13", "SOA");
     } 
}

2 个答案:

答案 0 :(得分:1)

我认为您需要在您的问题中添加更多代码和堆栈跟踪信息。

但是,我认为你可能误用了getter / setter的想法。我不认为你想要一个getter方法getMessageList来返回a JList。我的意思是,为什么?什么叫做那个方法,它对引用做了什么?

JPanelJFrame中,您可能想要 JList名为messageJList,这很好。但是,使用getMessageJList方法没有意义,因为您的JPanelJFrame 已经拥有它。这是一个领域。

所以,不要返回JList,这是非感性的。

现在,在JPanelJFrame,其中messageJList字段,您当然可能需要getMessage方法。

HTH。

答案 1 :(得分:1)

您的messageList是JList:

private JList messageList;

在方法getMessageList中,您正在分配

messageList = new JList(messageModel);

因此,您可以在messageList变量上调用类JList中定义的方法。

您正在定义方法

public void getMessage(String author, String text, String date, String tag) {
     messageModel.addElement(new Message(author, text, date, tag));
}

在您的Jp_Diskussion类中,因此您可以在Jp_Diskussion的实例上调用此方法,而不是在JList的实例上调用此方法。