[英]How to add JButton after a JTable
我有一個JTable,其中包含一些類似於SSCCE的數據:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.*;
import java.awt.Color;
class kanji{
public static void main(String args[]){
JFrame frame = new JFrame("Kanji");
JPanel pane = new JPanel();
JTable table = new JTable();
pane.setLayout(new BorderLayout());
JButton agreg = new JButton("Agregar");
DefaultTableModel model = new DefaultTableModel(get_data(), get_header());
JFrame hk = new JFrame("Historial de Significados");
Image icon = Toolkit.getDefaultToolkit().getImage("JLPT.jpg");
ImageIcon ima = new ImageIcon("JLPT.jpg");
table = new JTable(model){
@Override
public boolean isCellEditable(int row, int col){
switch(col){
case 0:
return false;
case 1:
return false;
case 2:
return true;
default:
return false;
}
}
@Override
public Class getColumnClass(int column) {
switch (column) {
case 0:
return String.class;
case 1:
return String.class;
case 2:
return Boolean.class;
default:
return Boolean.class;
}
}
};
DefaultTableCellRenderer r = new DefaultTableCellRenderer() {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
setForeground(Color.blue);
setHorizontalAlignment(JLabel.CENTER);
setFont(new Font("Microsoft JhengHei", Font.BOLD, 50));
return this;
}
};
DefaultTableCellRenderer r2 = new DefaultTableCellRenderer() {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
setHorizontalAlignment(JLabel.LEFT);
setFont(new Font("Microsoft JhengHei", Font.BOLD, 13));
return this;
}
};
table.getColumnModel().getColumn(0).setCellRenderer(r);
table.getColumnModel().getColumn(1).setCellRenderer(r2);
TableColumn column = null;
for (int i = 0; i < 3; i++) {
column = table.getColumnModel().getColumn(i);
if (i==0) {
column.setMaxWidth(80);
column.setMinWidth(80);
}
else{
if(i==1){
column.setPreferredWidth(470);
}
else{
column.setMaxWidth(50);
column.setMinWidth(50);
}
}
}
table.setRowHeight(table.getRowHeight()+70);
table.setModel(model);
table.getTableHeader().setReorderingAllowed(false);
JScrollPane scroll = new JScrollPane(table);
pane.add(scroll, BorderLayout.CENTER);
pane.add(agreg, BorderLayout.SOUTH);
frame.add(pane);
frame.setTitle("Historial de Significados");
frame.setSize(1350, 700);
frame.setIconImage(icon);
frame.setVisible(true);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
scroll.setViewportView(table);
}
public static Object [][]get_data(){
Object data[][] = new Object[][]{
{"\u4e00", "Uno, 1", true},
{"\u4e01", "Uno, 1", true},
{"\u4e02", "Uno, 1", true},
{"\u4e03", "Uno, 1", true},
{"\u4e04", "Uno, 1", true},
{"\u4e05", "Uno, 1", true},
{"\u4e06", "Uno, 1", true},
{"\u4e07", "Uno, 1", true},
{"\u4e08", "Uno, 1", true},
{"\u4e09", "Uno, 1", true}
};
return data;
}
public static String []get_header(){
String header [] = new String[]{"KANJI", "SIGNIFICADO", "Agregar"};
return header;
}
}
但是我想在創建JTable之后添加3個JButton,我希望有一個JTable不占用所有JFrame的大小,在我的代碼中我得到一個Button,但是我希望可以設置按鈕范圍。
我試過添加一個JPanel,然后嘗試使用“ setPreferredSize”,其中JScrollPane不起作用,這意味着我沒有出現,所以看不到所有表內容。 而且我還嘗試了對我不起作用的“ setSize”。
也許我必須做第二個小組或類似的話題,希望您能幫助我解決這個問題。
我猜一個Image可以說1000多個單詞,所以:
這就是我得到和擁有的以及我想要擁有的
所以用簡單的英語來說,我只想知道如何渲染表格並在渲染表格后的底部添加按鈕(但是我不希望按鈕具有所有的框架寬度,我希望它們遠離表格,而不是像我一樣並有可能更改其大小和位置)。
private void createUI() {
JFrame frame = new JFrame();
frame.setLayout(new BorderLayout());
final JTable table = new JTable(10, 4);
JPanel btnPnl = new JPanel(new BorderLayout());
JPanel topBtnPnl = new JPanel(new FlowLayout(FlowLayout.TRAILING));
JPanel bottombtnPnl = new JPanel(new FlowLayout(FlowLayout.CENTER));
topBtnPnl.add(new JButton("Select All"));
bottombtnPnl.add(new JButton("Cancel"));
bottombtnPnl.add(new JButton("Add Selected"));
btnPnl.add(topBtnPnl, BorderLayout.NORTH);
btnPnl.add(bottombtnPnl, BorderLayout.CENTER);
table.getTableHeader().setReorderingAllowed(false);
frame.add(table.getTableHeader(), BorderLayout.NORTH);
frame.add(table, BorderLayout.CENTER);
frame.add(btnPnl, BorderLayout.SOUTH);
frame.setTitle("JTable Example.");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
CheckABunch
是一個示例,顯示了如何基於當前選擇來更新TableModel
。
您可以看一下GridLayout
。
簡而言之,我已經對您的課程進行了一些更改,並且得到了以下幾點:
JButtons
分組到一個JPanel
,該JPanel
內部具有GridLayout
BorderLayout
JPanels
添加到框架中。 這是代碼:
//Another import sentences
import java.awt.GridLayout;
class kanji{
public static void main(String args[]){
// More code goes here
JPanel allowedOperations = new JPanel(new GridLayout(2, 2));
pane.setLayout(new BorderLayout());
// More code goes here
// All buttons are grouped here
allowedOperations.add(new JButton()); // Here's a trick
allowedOperations.add(agreg);
allowedOperations.add(new JButton("Save selected"));
allowedOperations.add(new JButton("Cancel"));
// Add the pane object to the frame
frame.add(pane, BorderLayout.CENTER);
// And finally add the allowedOperations object to the frame
frame.add(allowedOperations, BorderLayout.SOUTH);
// More code goes here
} //End class
我剛剛發布了修改內容,因此您需要對整個課程進行分組。
我知道這不是最好的方法,但是您可以從此處改進代碼。 還要注意,您可以先創建按鈕,然后再將其作為agreg
按鈕添加到allowedOperations
窗格中
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.