علامات التبويب مع المساواة (ثابت) عرض في JTabbedPane

StackOverflow https://stackoverflow.com/questions/476678

  •  20-08-2019
  •  | 
  •  

سؤال

وأنا أحاول الحصول على JTabbedPane فيها كل علامات التبويب (علامات التبويب الفعلية، وليس المكونات) لها نفس العرض (إما الحد الأدنى للعرض اللازمة لأوسع تسمية أو عرض ثابت).

ولقد حاولت تجاوز BasicTabbedPaneUI.getTabBounds(int tabIndex, Rectangle dest)، ولكن على ما يبدو لم يتم استخدام هذا الأسلوب من أساليب الرسم من BasicTabbedPaneUI، بدلا من ذلك يستخدم مجموعة rects لتحديد حجم علامات التبويب.

وتوجهي القادم سيكون لتجاوز JTabbedPane.insertTab(String title, Icon icon, Component component, String tip, int index) وتحديد حجم المفضل للعنصر التسمية، ولكن هذا لا يبدو أنيق جدا، وأنا لست حتى متأكدا من انها ستعمل على الإطلاق.

هل هناك طريقة لتحقيق ذلك؟

هل كانت مفيدة؟

المحلول

والجواب بسيط. عندما نضع اسم لعلامة التبويب، مجرد تنسيق الاسم باستخدام أتش تي أم أل. يقول

ن - الكائن JTabbedPane

tp.addTab("<html><body><table width='150'>Name</table></body></html>",Componentobject)

نصائح أخرى

واعتقد انها ليست معقدة كما كنت قد فعلت. مجرد استخدام setTabComponentAt () مع JLabel التي قمت بتعيين حجم المفضل.

ولقد حاول ما يلي:

tabPane.setUI(new javax.swing.plaf.metal.MetalTabbedPaneUI() {
    @Override
    protected int calculateTabHeight(int tabPlacement, int tabIndex, int fontHeight) {
        return super.calculateTabHeight(tabPlacement, tabIndex, fontHeight) + 12;
    }
});

ويبدو أن هذا العمل غرامة بالنسبة لي. ولكن إذا كان لديك باستخدام L & F مختلفة، فسوف ينتهي جعلها مع 'المعادن' بغض النظر.

وأعتقد أنك يمكن أن تحصل على واجهة المستخدم الافتراضية والقيام "instanceof" عليها لتحديد ما الذي يجري استخدامه ومثيل وفقا لذلك.

وعلى سبيل المثال:

TabbedPaneUI ui = tabPane.getUI();

if (ui instanceof WindowsTabbedPaneUI) {
    // Create the windows rendition
} else if (ui instanceof MetalTabbedPaneUI) {
    // Create the metal rendition
} else if (ui instanceof MotifTabbedPaneUI) {
    // Create the motif rendition
} else if (ui instanceof SynthTabbedPaneUI) {
    // Etc...
}

وهذا ما عملت بالنسبة لي.

 JLabel lab = new JLabel();
        lab.setPreferredSize(new Dimension(200, 30));
        jTabbedPane1.setTabComponentAt(0, lab);  // tab index, jLabel

وأو محاولة هذا التغيير على كافة عنصر التبويب في نفس الأحجام (وتسمى في الأسلوب الرئيسي)

وUIManager.getLookAndFeelDefaults().put("TabbedPane:TabbedPaneTab.contentMargins", new Insets(10, 100, 0, 0));

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top