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

刷新JTabbedPane组件

越俊艾
2023-03-14

我正在尝试实现 J 选项卡面板。在下面的代码中,我提出了一个与我想要实现的非常相似的案例。我通过将JPanel添加到J选项卡面板来创建了一个选项卡。我已经在JPanel中添加了一个J巴顿和JScrollPane。在单击 J 按钮时,我想添加一个新的 JPanel,其中包含一些 JRadio 按钮到 JScrollPane 中。但是,即使在刷新 JScrollPane 或主 JPanel 之后,这些也不会显示。请帮忙。代码如下所示。

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;


public class Test {

    static JFrame frame;


    public static void main(String[] args) {
    javax.swing.SwingUtilities.invokeLater(new Runnable() {

        @Override
        public void run() {
            createAndShowGUI();
        }
    });
}

private static void createAndShowGUI() {
    //Create and set up the window.
    frame = new JFrame("DynamicTreeDemo");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JTabbedPane tp = new JTabbedPane();
    final JScrollPane jsp = new JScrollPane();
    JPanel jp = new JPanel();
    JButton jb = new JButton("Refresh");
    jb.setActionCommand("Show");
    jb.addActionListener(new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent e) {
           if(e.getActionCommand().equalsIgnoreCase("Show")){
               JRadioButton jrb1 = new JRadioButton("First Option");
               JRadioButton jrb2 = new JRadioButton("Second Option");
               JRadioButton jrb3 = new JRadioButton("Third Option");
               ButtonGroup bg = new ButtonGroup();
               bg.add(jrb1);    
               bg.add(jrb2);
               bg.add(jrb3);
               JPanel p = new JPanel(new GridLayout(0,1));
               p.add(jrb1);
               p.add(jrb2);
               p.add(jrb3);

               jsp.add(p);
               jsp.revalidate();
               jsp.repaint();
           }    
        }
    });

    jp.setLayout(new GridLayout(0,1));
    jp.add(jb);
    jp.add(jsp);
    tp.add("First Tab", jp);


    frame.getContentPane().add(tp);                

    //Display the window.
    frame.pack();
    frame.setVisible(true);
}
}

共有3个答案

郭德惠
2023-03-14

JScrollPane仅适用于单个“视图”。无法将组件添加到滚动窗格。如果需要,可以使用setViewPortView()更改“视图”。要实现您想要的行为,请执行以下操作:

JPanel centralView = new JPanel();
// possibly configure that central view with appropriate layout and other stuffs
JScrollPane jsp = new JScrollPane(centralView);

... // 现在您可以将组件添加到中心视图,而不是 jsp.add(...) 调用。

濮阳鸿卓
2023-03-14

这些组件应该添加到名为jpJPanel中,而不是直接添加到滚动窗格中。

赵锐
2023-03-14

要向JScrollPane添加内容,请使用其JViewport而不是直接调用add()。在您的示例中替换:

jsp.add(p);

跟:

jsp.getViewport().add(p);

或者,使用包含其他组件JPanel 初始化 JScrollPane。根据您的示例:

final JPanel panel = new JPanel();
final JScrollPane jsp = new JScrollPane(panel);

panel.add(new JRadioButton("First Option"));
panel.add(new JRadioButton("Second Option"));
panel.add(new JRadioButton("Third Option"));

有关详细信息,请参阅如何使用滚动窗格。

 类似资料:
  • 我正在尝试更新我编写的程序的GUI。在新的GUI上,我有一个JFrame,其中包含一个JPanel,它有一个JTabbedPane和上面的两个按钮。 在JTabbedPane中,我有三个JPanel,其中包含不同的组件。(如按钮、文本字段等)所以现在我必须让所有组件根据类型对其执行相同的操作。 如果有一个文本字段,我必须做一些事情,但如果有一个按钮,我必须做其他事情。 所以之前我做过这样的事情:

  • 问题内容: 我想在运行时按下按钮时向JFrame中添加一些新组件。到目前为止,该方法仍然有效,但是我必须手动调整窗口大小才能看到新组件。 有什么我可以触发的动作或可以调用的方法来刷新窗口吗?任何帮助表示赞赏。提前致谢。 问题答案: 你必须去框架。如果这样不起作用,您还必须致电

  • 我对此完全陌生..... 问题是,当我切换到任何选项卡时,我无法获得正常的jpanel效果。按钮不能用鼠标点击(可以通过按tab键选择按钮n然后按space键点击),文本字段不能在鼠标点击时选择(只能通过按tab键选择)等。 那么对此有什么解决办法吗??我希望jtabbedpane中的面板像普通jpanel一样工作:)谢谢:)

  • 问题内容: 如果将新文档索引到Elasticsearch索引,则可在索引操作后1秒钟左右搜索新文档。但是,可以通过调用或对索引进行操作来强制使该文档可立即搜索。这两个操作之间有什么区别- 结果似乎对他们来说是相同的,可以立即搜索文档。 这些操作中的每一项到底是什么? ES文档似乎并未深入解决此问题。 问题答案: 您得到的答案是正确的,但我认为值得详细说明。 刷新有效地调用了Lucene索引读取器上

  • 如何在更改jPanels高度后刷新它?在我编译代码之后,它确实显示了它,但是在我单击两次random按钮(我使用random按钮将高度更改为随机数)之后,它并没有以我想要的方式显示它。 还有安托赫的事。jPanel是颠倒的。我该怎么改变呢? 下面是我到目前为止编写的代码:

  • 返回NULL。在选择JTabbedPane旁边的一个JPanel后直接调用它,这是我能想到的方法返回空组件的唯一原因;因为选项卡已打开但没有焦点。 然而,我需要找到一种方法来获得JTabbedPane中打开的选项卡。 而且,始终返回NULL。有6个标签。 getSelectedIndex()返回了正确的索引,但如果我传入该索引,它仍然表示组件为null。