Java更改选项卡排序

Java更改选项卡排序,java,jtabbedpane,Java,Jtabbedpane,我已经在下面设置了选项卡窗格的测试。我希望选项卡从左上角到右下角排序,这与下面的代码所产生的顺序相反 下面是由下面的代码生成的图片。这将是非常困难的,如果我试图按字母顺序排序的标签(仅举个例子) 所以为了清楚起见,BBL13应该是BBL0,BBL5应该是BBL19。像这样: BBL0-BBL5 BBL6-BBL12 BBL13-BBL19 而不是: import javax.swing.*; 导入java.awt.*; 导入java.util.ArrayList; 公开课考试{ 公共静态voi

我已经在下面设置了选项卡窗格的测试。我希望选项卡从左上角到右下角排序,这与下面的代码所产生的顺序相反

下面是由下面的代码生成的图片。这将是非常困难的,如果我试图按字母顺序排序的标签(仅举个例子)

所以为了清楚起见,BBL13应该是BBL0,BBL5应该是BBL19。像这样:

BBL0-BBL5

BBL6-BBL12

BBL13-BBL19

而不是:

import javax.swing.*;
导入java.awt.*;
导入java.util.ArrayList;
公开课考试{
公共静态void main(字符串[]args){
新测试();
}
私人测试(){
试一试{
UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
}捕获(例外e){
e、 printStackTrace();
}
SwingUtilities.invokeLater(()->{
JFrame=新JFrame(“主”);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
框架。设置尺寸(600300);
frame.add(createLayout());
frame.setVisible(true);
});
}
私有JPanel createLayout(){
JPanel mainLayout=newjpanel(newgridbaglayout());
JTabbedPane mainTabs=新JTabbedPane();
mainTabs.setTabLayoutPolicy(JTabbedPane.WRAP_TAB_布局);
ArrayList alBible=新ArrayList();
对于(int i=0;i<20;i++){
添加(i,makeTextArea());
mainTabs.addTab(“BBL”+i,alBible.get(i));
}
GridBagConstraints c=新的GridBagConstraints();
c、 fill=GridBagConstraints.BOTH;
c、 权重x=1.0;
c、 权重y=1.0;
c、 插图=新插图(0,0,0,0);
主布局。添加(主选项卡,c);
返回主布局;
}
私有JScrollPane makeTextArea(){
JTextArea textArea=新的JTextArea();
textArea.setEditable(true);
JScrollPane scrollTextArea=新的JScrollPane(textArea);
scrollTextArea.setVerticalScrollBarPolicy(JScrollPane.VERTICAL\u SCROLLBAR\u ALWAYS);
返回滚动区域;
}
}

至少对我来说,这是不可能的。因为如果选项卡按您的要求排序,那么如果用户选择BBL0选项卡呢?用户将如何看到其他选项卡?梦想吧。

顶部的选项卡似乎由
TabbedPaneUI

public abstract class TabbedPaneUI extends ComponentUI {
    public abstract int tabForCoordinate(JTabbedPane pane, int x, int y);
    public abstract Rectangle getTabBounds(JTabbedPane pane, int index);
    public abstract int getTabRunCount(JTabbedPane pane);
}
深入研究,您使用的默认UI是
metaltabedpaneui

public abstract class TabbedPaneUI extends ComponentUI {
    public abstract int tabForCoordinate(JTabbedPane pane, int x, int y);
    public abstract Rectangle getTabBounds(JTabbedPane pane, int index);
    public abstract int getTabRunCount(JTabbedPane pane);
}
这又有一个
公共类选项卡panelayout实现LayoutManager
包含
公共void layoutcainer(容器父级)


组合一个扩展它的测试

尝试反转你的循环。类似于(inti=19;i>=0;i--)的
反向顺序将BBL0抛出到最右边。是的,就像yilmaz说的那样。;)老实说,这对我来说毫无意义。如果你从一个只有一级标签的很长的窗口开始,并缩小窗口的大小,它会将第一组标签放下来,而不是最后一组标签!这就像默认设置是RTL而不是LTR。仅仅因为对你来说不可能,并不意味着对每个人来说都不可能。因为这个原因,你和他都不知道该怎么做,但其他人可能会投反对票。这里没有什么不可能的。从最左边的制表符0开始,继续到长度的末尾,换行到上一个列表顶部的下一行,然后继续向下到行顶部的页面行。事实上,这对我来说更有意义。它看起来像是倒着建的。@phflack所以我在回答中说“至少对我来说”。冷静下来,三思而后行。@JohnSmith你能给出你的解释吗?@yılmaz你的帖子不是一个好答案,你说你自己做不到,为什么不让别人来解决/做呢?你文章的其余部分更适合评论