إضافة أزرار داخل خلية JTable جنبا إلى جنب مع البيانات؟
سؤال
هل من الممكن إضافة أزرار داخل خلية JTable مع البيانات؟ ما أحاول القيام به هو إنشاء جدول مع أعمدة تعرض البيانات (الرقم) من قاعدة البيانات ، واثنين من الأزرار لزيادة/تقليل الرقم داخل نفس الخلية.
| معرف | الكمية |
|06| 2 [+][-] |
سيكون شيئًا مثل أعلاه مع [+] [-] كونه أزرار. لذلك عندما أضغط [+] ، سيتغير الرقم إلى 3 و 1 إذا الضغط [-].
المحلول
نعم ، هذا ممكن ، على الرغم من أنه لن يكون سهلاً.
عليك أن تكتب العرف الخاص بك عارض الخلية وذاتك محرر الخلية.
هذه عينة صنعتها في 5 دقائق:
إنه أبعد ما يكون عن الكمال ، لكنه يظهر المفهوم.
هذا هو رمز المصدر:
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 ، إذا فعل ما تحتاجه. صعب بعض الشيء ، بالتأكيد ، ولكن يجب أن يكون ممكنا.