当前位置: 首页 > 知识库问答 >
问题:

JPanel不出现在JopPane中

东方志尚
2023-03-14

我有一个包含按钮的J桌面面板。当我点击它时,我想出现一个定制的JOptionPane,我在其中添加了一个J标签和一个JTable。

问题是我在JOptionPane中没有得到任何东西

这是我的代码:

class Viewer extends JPanel{
  public Viewer(){
    JLabel l = new JLabel("Hi");
    JTable t = new JTable(2,2);
    JPanel p = new JPanel();
    p.add(l,BorderLayout.NORTH);
    p.add(t,BorderLayout.CENTER);
  }
}

public class JOptionPanesWithJPanel extends JFrame{
  JPanel desktoppane;
  public JOptionPanesWithJPanel(){
    desktoppane = new JPanel();
    int inset = 50;
    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    setBounds(inset, inset, screenSize.width  - inset*2, screenSize.height - inset*2);
    JPanel butPanel = new JPanel();
    JButton but = new JButton("click");
    butPanel.setVisible(true);
    butPanel.add(but);
    desktoppane.add(butPanel);
    getContentPane().add(desktoppane, BorderLayout.CENTER);
    setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    setVisible(true);

    but.addActionListener(new ActionListener(){

        @Override
        public void actionPerformed(ActionEvent ae) {
            Viewer v = new Viewer();
            //make JOptionPane resisable
            UIManager.put("OptionPane.minimumSize",new Dimension(150,150));
            JOptionPane.showMessageDialog(null, v, null, JOptionPane.PLAIN_MESSAGE);
        }
    });
}

public static void main(String[] args) {
    for(javax.swing.UIManager.LookAndFeelInfo lookAndFeelInfo : javax.swing.UIManager.getInstalledLookAndFeels()){
        if("Windows".equals(lookAndFeelInfo.getName())){
            try {
                javax.swing.UIManager.setLookAndFeel(lookAndFeelInfo.getClassName());
            } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                System.out.println(ex);
            }
            break;
        }
    }
    JOptionPanesWithJPanel j = new JOptionPanesWithJPanel();
  }
}

我应该怎么做才能在JOptionPane中显示面板?提前谢谢你。

PS:我使用JoptionPane的原因是禁止用户单击JDesktopPane中的任何其他地方(以及按钮),除非他关闭当前窗口。

共有1个答案

祁默
2023-03-14

您正在将组件添加到第二个面板,但没有将面板添加到<code>查看器</code>。。。

    public Viewer() {
        JLabel l = new JLabel("Hi");
        JTable t = new JTable(2, 2);
        JPanel p = new JPanel(); // <-- Create the new panel
        p.add(l, BorderLayout.NORTH);
        p.add(t, BorderLayout.CENTER);
        // And now what??
    }

如果没有更多证据,我会扔掉第二个面板,直接将组件添加到< code>Viewer中...

    public Viewer() {
        setLayout(new BorderLayout());
        JLabel l = new JLabel("Hi");
        JTable t = new JTable(2, 2);
        add(l, BorderLayout.NORTH);
        add(t, BorderLayout.CENTER);
    }

挑剔的人...

这...

Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
setBounds(inset, inset, screenSize.width - inset * 2, screenSize.height - inset * 2);

这是一个非常糟糕的方式来确定你的框架的大小/位置。不是每个人都有相同大小或位置的任务栏/坞,你不应该依赖“神奇”数字(你组成的数字),相反,你应该找到合适的方法来确定环境的当前状态。

查看如何在Java Swing中设置当前屏幕大小?有关检测屏幕大小和屏幕可视区域的详细信息,请参阅

 类似资料:
  • 当我的JButton被点击时,我的JPanel不会出现。当我在go()方法中添加JPanel时,它确实会出现。然而,当我尝试通过单击JButton来执行它时,它并不起作用。但是,程序会进入侦听器的actionPeformed()方法的循环。

  • Java Jpanel在运行时没有显示,在几秒钟引用后触底反弹(getContentPane().add(new MeFirstApp());)在 MeFirstApp 类中 /**文件:MeFirstPanel。java**Description:这个类在JPanel中定义了一个GUI,其中包含*个带有初始标签“Me first!”的JButton还有“下一个我!”*按下任一按钮都会导致标签交换

  • 问题内容: 我正在上课的酒店管理软件上工作,我的代码遇到了一些问题。此时,我只是想将我在单独的类中创建的JPanel添加到主gui中。任何帮助将不胜感激。〜谢谢! 注意:错误发生在“ jpanel.add(“ Room”,room.getRoomPanel());“行上 代码:HotelSystem.java RoomSystem.java 问题答案: 您从未初始化 即使您确实对其进行了初始化,您

  • 我正在构建一个清单Gui应用程序,我希望用描述的第一个字母来搜索项目。所以,我需要在JPanel上显示26个小按钮(将是字母表中的字母)。然后使用搜索按钮来对应保存的文件。但是我似乎不能让按钮显示???它只是JPanel。我这里只有整个程序的片段。只是突出显示其中的JPanel和JButton。

  • 我想在地图上显示许多不同的标签,所以我在面板中使用null布局,并为每个标签调用setLocation。但是,由于某些原因,标签没有显示出来。如果我把锅拿开。setLayout(null),则标签显示在面板的顶部中心。为什么null布局不能与setPosition一起工作?

  • 这是我的密码 没有语法错误,但是我的Jtag没有添加(按钮工作正常)。我不想从null更改布局,因为我希望能够定义按钮和标签的位置。有人知道为什么这行不通吗?