سؤال

أحاول أن أصنع JTable التي لديها امتدادات الأعمدة المتاحة.على وجه التحديد، أنا أتطلع إلى عش أ JTable داخل آخر JTable, وعندما ينقر المستخدم لعرض الجدول المتداخل، يجب أن يتوسع لدفع الصفوف الموجودة بالأسفل وملء المساحة الفارغة.وهذا مشابه لما تراه في MS Access حيث يمكنك دمج الجداول، وسيظهر لك النقر فوق زر التوسيع الموجود في الصف الإدخالات المقابلة في الجدول المتداخل.

إذا كان شخص ما يعرف طريقة لإجراء عمود يمتد معه JTable, ، رجاءا هل يمكنك أن ترشدني إلى الوجهة الصحيحة؟أو إذا كنت تعرف طريقة بديلة للقيام بذلك، فأنا منفتح على الاقتراحات.يتم إنشاء التطبيق باستخدام Swing.يجب أن تكون العناصر الموجودة في الجدول، سواء ذات المستوى العالي أو المستوى المنخفض، قابلة للتحرير في أي حل.باستخدام متداخلة JTableلن تكون هذه مشكلة، وأي حل آخر يجب أن يأخذ ذلك في الاعتبار أيضًا.

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

المحلول

كمؤشر في الاتجاه الصحيح، حاول هذا المقال في SwingWiki الذي يشرح طريقة TableUI للعمود الممتد بشكل جيد.قبل ذلك، قمت أيضًا بتجربة بعض البدائل مثل تجاوز طرق طلاء TableCellRenderer دون نجاح كبير.

نصائح أخرى

تحتاج إلى كتابة TableUI الخاص بك للجدول الرئيسي.قد يكون من المفيد أيضًا استخدام TableModel الخاص بك لحفظ بيانات إضافية مثل توسيع الصف.لكن هذا اختياري.

أكتب واجهة TableUI متساوية تعمل على توسيع الصف وإظهار محرر النصوص.في TableUI، تحتاج إلى تغيير ارتفاع الصف ديناميكيًا باستخدام table.setRowHeight(height).ومن الضروري أيضًا نسخ بعض العناصر من BaseTableUI لأنه لا يمكنك الوصول إلى العناصر الخاصة.

بناءً على التعليمات البرمجية من Code-Guru:

/*
 *  (swing1.1beta3)
 * 
 * |-----------------------------------------------------|
 * |   1st  |      2nd    |      3rd         |
 * |-----------------------------------------------------|
 * |    |    |    |    |        |        |
 */
//package jp.gr.java_conf.tame.swing.examples;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;

import jp.gr.java_conf.tame.swing.table.*;

/**
 * @version 1.0 11/09/98
 */
public class MultiWidthHeaderExample extends JFrame {

  MultiWidthHeaderExample() {
    super( "Multi-Width Header Example" );

    DefaultTableModel dm = new DefaultTableModel();
    dm.setDataVector(new Object[][]{
      {"a","b","c","d","e","f"},
      {"A","B","C","D","E","F"}},
    new Object[]{"1 st","","","","",""});

    JTable table = new JTable( dm ) {
      protected JTableHeader createDefaultTableHeader() {
        return new GroupableTableHeader(columnModel);
      }
    };
    TableColumnModel cm = table.getColumnModel();
    ColumnGroup g_2nd = new ColumnGroup("2 nd");
    g_2nd.add(cm.getColumn(1));
    g_2nd.add(cm.getColumn(2));
    ColumnGroup g_3rd = new ColumnGroup("3 rd");
    g_3rd.add(cm.getColumn(3));
    g_3rd.add(cm.getColumn(4));
    g_3rd.add(cm.getColumn(5));
    GroupableTableHeader header = (GroupableTableHeader)table.getTableHeader();
    header.addColumnGroup(g_2nd);
    header.addColumnGroup(g_3rd);
    JScrollPane scroll = new JScrollPane( table );
    getContentPane().add( scroll );
    setSize( 400, 100 );  
    header.revalidate(); 
  }

  public static void main(String[] args) {
    MultiWidthHeaderExample frame = new MultiWidthHeaderExample();
    frame.addWindowListener( new WindowAdapter() {
      public void windowClosing( WindowEvent e ) {
        System.exit(0);
      }
    });
    frame.setVisible(true);
  }
}

مصدر: http://www.codeguru.com/java/articles/125.shtml (غير متوفر منذ عام 2012، انظر الآن في أرشيف الويب)

موارد أخرى:

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