2016-12-05 1 views
0

imageJTable не отображается. Как это исправить?

В картине я присоединенной (ссылка) выше, JTable должен быть показан под вперед, назад, и удаление кнопок с JTable заголовками: X/Y/ширина/высота

Но, не. Кто-нибудь может мне помочь, пожалуйста! что я делаю неправильно здесь?

import java.awt.BorderLayout; 
import javax.swing.BorderFactory; 
import javax.swing.BoxLayout; 
import javax.swing.JButton; 
import javax.swing.JComboBox; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.JTextField; 
import javax.swing.table.DefaultTableModel; 

public class Whiteboard extends JFrame { 
    public static void main(String[] args) { 
     new Whiteboard(); 
    } 

    private static final long serialVersionUID = 1L; 
    private String[] petStrings = { "Bird", "Cat", "Dog", "Rabbit", "Pig" }; 

    public Whiteboard() { 
     JButton setColor = new JButton("Color"); 
     JPanel colorPanel = new JPanel(); 
     colorPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); 
     colorPanel.setLayout(new BoxLayout(colorPanel, BoxLayout.X_AXIS)); 
     colorPanel.add(setColor); 

     JButton addRect = new JButton("Rect"); 
     JButton addOval = new JButton("Oval"); 
     JButton addLine = new JButton("Line"); 
     JButton addText = new JButton("Text"); 
     JPanel addPanel = new JPanel(); 
     addPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); 
     addPanel.setLayout(new BoxLayout(addPanel, BoxLayout.X_AXIS)); 
     addPanel.add(addRect); 
     addPanel.add(addOval); 
     addPanel.add(addLine); 
     addPanel.add(addText); 

     JTextField setText = new JTextField(""); 
     JComboBox<String> changeFont = new JComboBox<String>(petStrings); 
     JPanel textPanel = new JPanel(); 
     textPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); 
     textPanel.setLayout(new BoxLayout(textPanel, BoxLayout.X_AXIS)); 
     textPanel.add(setText); 
     textPanel.add(changeFont); 

     JButton sendForward = new JButton("Forward"); 
     JButton sendBackward = new JButton("Backward"); 
     JButton removeObj = new JButton("Remove"); 
     JPanel orderPanel = new JPanel(); 
     orderPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); 
     orderPanel.setLayout(new BoxLayout(orderPanel, BoxLayout.X_AXIS)); 
     orderPanel.add(sendForward); 
     orderPanel.add(sendBackward); 
     orderPanel.add(removeObj); 

     DefaultTableModel tableModel = new DefaultTableModel(new String[] { "X", "Y", "Width", "Height" }, 0); 
     JTable infoTable = new JTable(tableModel); 
     JScrollPane tablePanel = new JScrollPane(); 
     infoTable.setPreferredScrollableViewportSize(infoTable.getPreferredSize()); 
     infoTable.setFillsViewportHeight(true); 
     tablePanel.add(infoTable); 
     tableModel.addRow(new String[] { "TEST1", "TEST2", "TEST3", "TEST4" }); 

     JPanel control = new JPanel(); 
     control.setLayout(new BoxLayout(control, BoxLayout.Y_AXIS)); 
     control.add(colorPanel); 
     control.add(addPanel); 
     control.add(textPanel); 
     control.add(orderPanel); 
     control.add(tablePanel); 

     Canvas canvas = new Canvas(); 
     canvas.setLayout(new BoxLayout(canvas, BoxLayout.PAGE_AXIS)); 

     JPanel window = new JPanel(); 
     window.add(control); 
     window.add(canvas); 

     getContentPane().add(window); 
     pack(); 
     setLocationRelativeTo(null); 
     setTitle("Whiteboard"); 
     setLayout(new BorderLayout()); 
     setVisible(true); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 
} 
+1

Возможно, вы могли бы уменьшить это до [mcve]. – khelwood

ответ

3
tablePanel.add(infoTable); 

Не добавлять компоненты непосредственно к JScrollPane. Компонент должен быть добавлен к панели JViewport панели прокрутки.

Вместо этого вы можете использовать:

JScrollPane tablePanel = new JScrollPane(infoTable); // easiest way, 

или

tablePanel.getViewport().setViewportView(infoTable); 

Кроме того, не используйте Canvas класс. Это компонент AWT. Вы должны использовать JPanel.

+0

так, мне нужно удалить всю строку tablePanel.add (infoTable); или просто нужно удалить infoTable внутри круглых скобок? и у меня уже есть JScrollPane tablePanel = new JScrollpane() ;, поэтому мне просто нужно добавить infoTable внутри круглых скобок? – trueno

+0

Кроме того, что вы подразумеваете под словом Canvas? Нужно ли мне удалять или изменять что-либо для этого? – trueno

+0

@trueno, Почему вы задаете такой вопрос, не попробовав? Почему бы вам подождать около часа или более для ответа, когда вы можете ответить на свой вопрос через минуту, просто попробовав его? Поэтому ответы на ваши два комментария: 1) Вы попробовали? 2) используйте JPanel. – camickr