3

私は JMenu を持っており、人が JMenuItem をクリックすると、中央のパネルが更新されて新しいものが表示されます。だから私は正常に動作する .removeAll を試しましたが、何かを追加しようとすると表示されません。

注:私はWindowBuilder PROを使用しているので、まだ慣れようとしています。

これが私のコードです:

import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JMenu;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SpringLayout;

import java.awt.List;
import javax.swing.JLabel;
import javax.swing.JTextPane;
import javax.swing.JSeparator;
import org.eclipse.wb.swing.FocusTraversalOnArray;
import java.awt.Component;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.Panel;
import java.awt.GridBagConstraints;


public class HomeScreen {

JFrame frame;
private final Panel panel = new Panel();

public HomeScreen(String name) {
    initialize(name);
}

/**
 * Initialize the contents of the frame.
 */
private void initialize(String name) {
    frame = new JFrame("Timzys CMS / Monitor / Account( " + name + " )");
    frame.setResizable(false);
    frame.setSize(694,525);
    frame.setLocationRelativeTo(null);
    
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
    JMenuBar menuBar = new JMenuBar();
    frame.setJMenuBar(menuBar);
    
    JMenu mnMonitor = new JMenu("Monitor");
    menuBar.add(mnMonitor);
    
    JMenuItem mntmUsers = new JMenuItem("Users");
    mnMonitor.add(mntmUsers);
    
    JMenuItem mntmContentPosts = new JMenuItem("Content Posts");
    mnMonitor.add(mntmContentPosts);
    
    JMenuItem mntmLogs = new JMenuItem("Logs");
    mnMonitor.add(mntmLogs);
    
    JMenu mnExtras = new JMenu("Extras");
    menuBar.add(mnExtras);
    
    mntmUsers.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e)
        {
             frame.getContentPane().removeAll();
        
             frame.getContentPane().add(new JLabel("Test"));
             frame.getContentPane().revalidate();
            
        }
    });
    
    
    JMenuItem mntmFeedbacksuggestions = new JMenuItem("Feedback/Suggestions");
    mnExtras.add(mntmFeedbacksuggestions);
    frame.getContentPane().setLayout(null);
    panel.setBounds(0, 0, 688, 476);
    frame.getContentPane().add(panel);
    panel.setLayout(null);
    
    JTextPane txtpnWelcomeTimzysCms = new JTextPane();
    txtpnWelcomeTimzysCms.setFont(new Font("Arial", Font.PLAIN, 18));
    txtpnWelcomeTimzysCms.setEditable(false);
    txtpnWelcomeTimzysCms.setText("Welcome Timzys CMS Monitor. If you are here then you are a admin! So please do not tamper with any important things. If you have questions or suggestions goto the extras tab and submit a feedback idea. Enjoy!");
    txtpnWelcomeTimzysCms.setBounds(10, 11, 668, 72);
    panel.add(txtpnWelcomeTimzysCms);

 }
}
4

2 に答える 2

3

おそらく、質問の他の誰かと同様の問題に直面しているでしょう:
Java Swing revalidate() vs repaint()

提案されているように:repaint代わりに呼び出してみてrevalidateください( method の実装で現在呼び出しているものactionPerformed

于 2012-08-27T21:47:51.227 に答える
1

問題は、フレームのレイアウトを null に設定しているため、JLabel追加する新しいフレームのサイズを設定する必要があることです。例えば:

JLabel label = new JLabel("Test");
label.setSize(100, 100);
frame.getContentPane().add(label);

余談です が、実際には、なぜここで AWT と Swing コンポーネントを混在させているのだろうかと思います。メニューをブロックするフレームに追加された重い AWT パネルがあります。に切り替えると、JPanelこれが修正されます。

于 2012-08-27T22:12:44.370 に答える