0

私は3つのJavaクラスを持っています:

JFrame:HomeView、JPanel:TopicListView、別のJPanel:ReplyListView。

HomeViewには、TopicListViewを表示するためにクリックできるメニュー項目があります。TopicListViewで、クリックしてReplyListViewを表示できるボタンが必要です。ボタンがクリックされると、openReplyListView()メソッドが呼び出されます。このメソッドは、新しいJPanelを作成し、現在のJPanelをそれに置き換えます。ただし、openReplyListView()のコードは機能しません。

注:私はCardLayoutを使用していません。

これを機能させる方法についての助けをいただければ幸いです。

前もって感謝します。

HomeViewクラス:

public class HomeView extends JFrame {

private JPanel contentPane;
private JMenuBar menuBar;
private JMenu mnForum;
private JMenuItem mntmReply;
private JMenuItem mntmTopic;

/**
 * Launch the application.
 */
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                HomeView frame = new HomeView();
                frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

/**
 * Create the frame.
 */
public HomeView() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 1280, 720);
    setJMenuBar(getMenuBar_1());
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    contentPane.setLayout(new BorderLayout(0, 0));
    setContentPane(contentPane);
}

private JMenuBar getMenuBar_1() {
    if (menuBar == null) {
        menuBar = new JMenuBar();
        menuBar.add(getMnForum());
    }
    return menuBar;
}
private JMenu getMnForum() {
    if (mnForum == null) {
        mnForum = new JMenu("Forum");
        mnForum.add(getMntmTopic());
        mnForum.add(getMntmReply());
    }
    return mnForum;
}
private JMenuItem getMntmReply() {
    if (mntmReply == null) {
        mntmReply = new JMenuItem("Reply");
        mntmReply.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                JPanel panel = new ReplyView();
                getContentPane().removeAll();
                getContentPane().add(panel);
                getContentPane().validate();
                getContentPane().repaint();
            }
        });
    }
    return mntmReply;
}


private JMenuItem getMntmTopic() {
    if (mntmTopic == null) {
        mntmTopic = new JMenuItem("Topic");
        mntmTopic.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                JPanel panel = new TopicListView();
                getContentPane().removeAll();
                getContentPane().add(panel);
                getContentPane().validate();
                getContentPane().repaint();
            }
        });
    }
    return mntmTopic;
}
}

TopicListViewクラス:

public class TopicListView extends JPanel {
private JTable table;
private JScrollPane scrollPane;
private JLabel lblTopics;


/**
 * Create the panel.
 */
public TopicListView() {
    setLayout(null);
    add(getTable());
    add(getScrollPane());
    add(getLblTopics());
}

**Code snippet for the table and the scrollpane:**


private void openReplyListView(){
    JPanel panel = new ReplyListView();
    getContentPane().removeAll();
    getContentPane().add(panel);
    getContentPane().validate();
    getContentPane().repaint();

}

ReplyListViewクラス(一般的にはTopicListViewと同じです)

public class ReplyListView extends JPanel {
private JTable table;
private JScrollPane scrollPane;
private JLabel lblTest;

/**
 * Create the panel.
 */
public ReplyListView() {
    setLayout(null);
    add(getTable());
    add(getScrollPane());
    add(getLblTest());

}
private JTable getTable() {
    if (table == null) {
        table = new JTable();
        table.setBounds(414, 114, 464, 354);
    }
    return table;
}
private JScrollPane getScrollPane() {
    if (scrollPane == null) {
        scrollPane = new JScrollPane(getTable());
        scrollPane.setBounds(414, 114, 464, 349);
    }
    return scrollPane;
}
private JLabel getLblTest() {
    if (lblTest == null) {
        lblTest = new JLabel("TEST");
        lblTest.setFont(new Font("Tahoma", Font.PLAIN, 30));
        lblTest.setBounds(593, 35, 81, 68);
    }
    return lblTest;
}
}
4

1 に答える 1

2

LayoutMangerがありませTopicListViewん(つまりsetLayout(null)、コンストラクターにあります)。

通常、それは悪い考えです。(それがあなたの問題の原因だと私はかなり確信しています)

このようなものを試してください

private void openReplyListView(){
    JPanel panel = new ReplyListView();
    removeAll();
    setLayout(new BorderLayout());
    add(panel, BorderLayout.CENTER);
    validate();
    repaint();
}
于 2013-01-12T11:26:44.260 に答える