首页 > 解决方案 > JTabbedPane setTabComponent

问题描述

老实说,我不确定我是否发现了错误或我的代码有问题。我正在尝试为简单的 Web 浏览器实现实现一些 JTabbedPane 选项卡。Java 参考似乎很简单,但我得到了不稳定的行为;选项卡不会通过 jtabbedpane.remove(index) 调用关闭。

我们希望行为类似于此链接中的第二个示例:

https://docs.oracle.com/javase/tutorial/uiswing/components/tabbedpane.html

调用 jtabbedpane.remove(index) 失败,标签数量不同步;我关闭一个,计数保持不变。我不确定验证应该在 Java 代码中的什么位置。

这是个人项目,不是工作。

public class CustomJButton___CloseTabJButton extends JButton
{
    public Integer index;

    public CustomActionListener listener = new CustomActionListener();

    public CustomJButton___CloseTabJButton()
    {
        this.addActionListener(listener);

        setPreferredSize(new Dimension(17,17));

        setToolTipText("Close this tab");

        setContentAreaFilled(false);


    }

    //paint the cross
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D) g.create();
        //shift the image for pressed buttons
        if (getModel().isPressed()) {
            g2.translate(1, 1);
        }
        g2.setStroke(new BasicStroke(2));
        g2.setColor(Color.BLACK);
        if (getModel().isRollover()) {
            g2.setColor(Color.MAGENTA);
        }
        int delta = 6;
        g2.drawLine(delta, delta, getWidth() - delta - 1, getHeight() - delta - 1);
        g2.drawLine(getWidth() - delta - 1, delta, delta, getHeight() - delta - 1);
        g2.dispose();
    }

    public class CustomActionListener implements ActionListener
    {
        @Override
        public void actionPerformed(ActionEvent actionEvent)
        {
            CustomJTabbedPane jtabbedpane = (CustomJTabbedPane) Bodhi.pull(new Name("//jtabbedpane"));

            int closureindex = jtabbedpane.indexOfTabComponent(CustomJButton___CloseTabJButton.this);

            int selectedtabindex = jtabbedpane.getSelectedIndex();

            int tabcount = jtabbedpane.getTabCount();

            //int tabcount2 = jtabbedpane.getTabRunCount();

            System.out.println("ClosureIndex "+closureindex);

            System.out.println("SelectedTabIndex "+selectedtabindex);

            //System.out.println("Tabcount 2"+tabcount2+"\n");

            if(closureindex != -1)
            {
                jtabbedpane.setSelectedIndex(closureindex);

                jtabbedpane.removeTabAt(closureindex);

                jtabbedpane.invalidate();

                jtabbedpane.revalidate();

                System.out.println("Tabcount "+tabcount);
            }
        }
    }
}

标签: javaswingjtabbedpane

解决方案


推荐阅读