إضافة أزرار داخل خلية JTable جنبا إلى جنب مع البيانات؟

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

  •  20-09-2019
  •  | 
  •  

سؤال

هل من الممكن إضافة أزرار داخل خلية JTable مع البيانات؟ ما أحاول القيام به هو إنشاء جدول مع أعمدة تعرض البيانات (الرقم) من قاعدة البيانات ، واثنين من الأزرار لزيادة/تقليل الرقم داخل نفس الخلية.

| معرف | الكمية |
|06| 2 [+][-] |

سيكون شيئًا مثل أعلاه مع [+] [-] كونه أزرار. لذلك عندما أضغط [+] ، سيتغير الرقم إلى 3 و 1 إذا الضغط [-].

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

المحلول

نعم ، هذا ممكن ، على الرغم من أنه لن يكون سهلاً.

عليك أن تكتب العرف الخاص بك عارض الخلية وذاتك محرر الخلية.

هذه عينة صنعتها في 5 دقائق:

sample

إنه أبعد ما يكون عن الكمال ، لكنه يظهر المفهوم.

هذا هو رمز المصدر:

import java.awt.Component;
import java.awt.Font;
import javax.swing.*;
import javax.swing.table.*;
import java.awt.Dimension;

public class CustomCell {
    public static void main( String [] args ) { 
        Object [] columnNames = new Object[]{ "Id", "Quantity" };
        Object [][] data        = new Object[][]{ {"06", 1}, {"08", 2} };

        JTable table = new JTable( data, columnNames ) { 
            public TableCellRenderer getCellRenderer( int row, int column ) {
                return new PlusMinusCellRenderer();
            }
         };

        table.setRowHeight( 32 );
        showFrame( table );
    }

    private static void showFrame( JTable table ) {
        JFrame f = new JFrame("Custom Cell Renderer sample" );
        f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        f.add( new JScrollPane( table ) );
        f.pack();
        f.setVisible( true );
    }
}

class PlusMinusCellRenderer extends JPanel implements TableCellRenderer {
        public Component getTableCellRendererComponent(
                            final JTable table, Object value,
                            boolean isSelected, boolean hasFocus,
                            int row, int column) {
                this.add( new JTextField( value.toString()  ) );
                this.add( new JButton("+"));
                this.add( new JButton("-"));
                return this;
        }
}

إليك موضوع قد يكون مثير للإعجاب و هنا.

نصائح أخرى

كما نوقش في الدورة التعليمية ستحتاج إلى كلا العارضين لعرض قيمتك ومحرره لاكتشاف الأحداث من الخلية التي يتم تحريرها. في هذا مثال, ، ال Component هو JCheckBox. لاحظ أن هذا يتطلب العرف DataModel هذا يمتد AbstractTableModel لتزويد الصحيح Class لعمود معين. اقتراح جوناس للاستخدام JSpinner هو جيد يعمل بشكل جيد.

أعتقد أنك بحاجة إلى إنشاء عارض خلية مخصصة إذا كنت تريد إظهار أي شيء آخر غير النص (أو الأرقام) في الخلية. وظيفة عارض الخلية هي رسم كل ما تحتاج لإظهاره في الخلية.

نرى وثائق عارض الجدول.

لذلك في هذه الحالة ، يمكنك إنشاء jpane صغير يحتوي على حقل النص والأزرار الصغيرة + و - أو مجرد مكون Jspinner ، إذا فعل ما تحتاجه. صعب بعض الشيء ، بالتأكيد ، ولكن يجب أن يكون ممكنا.

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